C语言中巧用PCRE正则表达式

标准库不带正则?没关系,用 PCRE 就够了。

C 语言的字符串一向挺硬核,要玩点花的,比如正则匹配,就得靠第三方库帮忙。PCRE(Perl-Compatible Regular Expressions)算是老牌选手了,Linux 上自带的多工具也都用它。

编译正则用regcomp(),匹配用regexec(),记得用regfree()释放资源——这三步基本是固定套路。写的时候也不难,关键是参数得搞清楚,是cflags,像REG_ICASE(忽略大小写)和REG_EXTENDED(启用扩展语法)这些,配合着用,效果更灵活。

比如你想匹配邮箱地址,先把表达式编译成机器能识别的格式,拿regexec()去试一把,看有没有命中。匹配结果存在regmatch_t数组里,能清楚知道每个命中的起止位置,自己再提取就好。

匹配失败或者编译出错了也别慌,regerror()可以给你返回个比较清晰的报错信息,方便你排查。整体上看,正则功能虽然不是 C 的原生能力,但借助 PCRE 这些库,做起来也不比别的语言差。

如果你用 C 写网络服务、日志这些场景,正则匹配经常能省下不少判断代码。就是要注意:每次编译后别忘了释放内存,不然跑久了容易出事。

想多了解点其他语言的写法?你可以看看Python 正则JavaScript 正则这些例子,对比着用会更有感觉。

doc 文件大小:41.5KB