如何在 GNU G++ / GCC 中使用正则表达式来匹配、搜索和替换子字符串?例如,你能提供任何关于和其他的教程吗?regex_t
谷歌搜索一个多小时没有给我任何可以理解的教程或手册。
我强烈建议使用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
我在这里找到了答案:
#include <regex.h>
#include <stdio.h>
int main()
{
int r;
regex_t reg;
if (r = regcomp(®, "\\b[A-Z]\\w*\\b", REG_NOSUB | REG_EXTENDED))
{
char errbuf[1024];
regerror(r, ®, 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(®, argv[i], 0, NULL, 0) == REG_NOMATCH)
continue;
printf("matched: %s\n", argv[i]);
}
return 0;
}
上面的代码将为我们提供
matched: Moo
matched: OlOlo
matched: ZaooZA~!
手册应该很容易找到:POSIX 正则表达式函数。如果您不明白这一点,我真的建议您尝试复习您的 C 和 C++ 技能。
请注意,一旦匹配,实际替换子字符串是一个完全不同的问题,正则表达式函数不会帮助您。