2011-03-03 11 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