正则表达式是个好东西,在 C/C++ 中怎么使用正则表达式呢。
Wikipedia 上有一个正则表达式引擎比较,可供参考。
C 中有一个库叫做 regex。使用起来也蛮简单的。大致用法如下:
#include <regex.h> bool regexp_match(const char *pattern, const char *text){ regex_t _reg; // 编译匹配模式 int z = regcomp(&_reg, pattern, REG_EXTENDED); // 使用扩展正则表达式 if(z!=0) { // 非 0 值表示失败 printf("Error: regcomp\n"); return false; } const size_t nmatch = 10; regmatch_t pm[10]; int rv = regexec(&_reg, text, nmatch, pm, 0); // 如果不想获得匹配信息,rv = regexec(&_reg, text, 0, NULL, 0); // 返回 0 表示匹配成功, 非 0 值表示匹配失败 regfree(&_reg); // 释放资源 return (rv==0); }
上面的例子有提到扩展的正则表达式(Extended Regexp), 对应的是 Basic Regexp。在Basic Regexp中,‘*’号、‘+’号等被作为普通字符处理,需要加反斜线转义才表示匹配数量。
除了 regexp,GLib (GNU C Library) 也提供了正则表达式的实现 Perl-Compatible Regular Expressions(PCRE)。