GCC正则表达式

时间:2011-03-03 10:26:59

标签: c regex linux gcc libstdc++

如何在GNU G ++ / GCC中使用正则表达式来匹配,搜索和替换子字符串?例如。你可以在regex_t和其他人上提供任何教程吗?

谷歌搜索超过一个小时给了我没有可理解的教程或手册。

3 个答案:

答案 0 :(得分:4)

我强烈建议使用Boost C ++正则表达式库。如果你正在开发严肃的C ++,那么Boost肯定是你必须考虑的事情。

该库支持Perl和POSIX正则表达式语法。我个人更喜欢Perl正则表达式,因为我相信它们更直观,更容易正确。

http://www.boost.org/doc/libs/1_46_0/libs/regex/doc/html/boost_regex/syntax.html

但如果你对这个优秀的图书馆没有任何了解,我建议你从这里开始:

http://www.boost.org/doc/libs/1_46_0/libs/regex/doc/html/index.html

答案 1 :(得分:2)

手册应该很容易找到:POSIX regular expression functions。如果您不明白,我建议您尝试提高您的C和C ++技能。

请注意,在匹配后实际替换子字符串是一个完全不同的问题,正则表达式函数无法帮助您解决这个问题。

答案 2 :(得分:2)

我找到了答案here

#include <regex.h>
#include <stdio.h>

int main() 
{
  int r;
  regex_t reg;

  if (r = regcomp(&reg, "\\b[A-Z]\\w*\\b", REG_NOSUB | REG_EXTENDED)) 
  {
    char errbuf[1024];

    regerror(r, &reg, errbuf, sizeof(errbuf));
    printf("error: %s\n", errbuf);

    return 1;
  }

  char* argv[] = { "Moo", "foo", "OlOlo", "ZaooZA~!" };

  for (int i = 0; i < sizeof(argv) / sizeof(char*); i++) 
  {
    if (regexec(&reg, argv[i], 0, NULL, 0) == REG_NOMATCH)
      continue;

    printf("matched: %s\n", argv[i]);
  }

  return 0;
}

上面的代码将为我们提供

matched: Moo 
matched: OlOlo 
matched: ZaooZA~!