正则表达式是个好东西,在 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)。