如何在GNU G ++ / GCC中使用正则表达式来匹配,搜索和替换子字符串?例如。你可以在regex_t
和其他人上提供任何教程吗?
谷歌搜索超过一个小时给了我没有可理解的教程或手册。
答案 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(®, "\\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~!