2011-03-03 15 views
2

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

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

+0

现在你有两个问题。 – iBug 2017-08-06 00:58:17

回答

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~! 
2

手册应该很容易找到:POSIX regular expression functions。如果你不明白这一点,我真的会建议你尝试刷新你的C和C++技能。

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

+0

肯定丑陋的文档..反正我喜欢JavaScript做同样的工作的方式。 C不会为这里的js举办蜡烛 – Jaseem 2011-09-29 16:47:46

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

关键是我无法使用任何第三方库。但我建议libstdC++存在于MinGW编译器集合中,所以我认为使用标准Unix/Posix/Berkley正则表达式是可能的。 – shybovycha 2011-03-03 19:47:32