3

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

谷歌搜索一个多小时没有给我任何可以理解的教程或手册。

4

3 回答 3

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

于 2011-03-03T19:30:22.533 回答
3

我在这里找到了答案:

#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~!
于 2011-03-03T22:17:11.750 回答
2

手册应该很容易找到:POSIX 正则表达式函数。如果您不明白这一点,我真的建议您尝试复习您的 C 和 C++ 技能。

请注意,一旦匹配,实际替换子字符串是一个完全不同的问题,正则表达式函数不会帮助您。

于 2011-03-03T10:33:34.610 回答