C++ Insight: 正则表达式 (regexp)

风行水上 @ 2009-07-31 11:25:03
标签:

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

    参考资源

    标签:

      分享到:
      comments powered by Disqus

      28/32ms