2016-04-07 84 views
-1

我一直試圖做幾天,但仍然沒有得到正確的結果。正則表達式 - 在多行和他們的位置獲取多個捕獲

我需要從整個字符串(包括換行符)獲取所有捕獲,但不會在第一次匹配後返回。我有這個正則表達式:(\d+)\s*;。結果應該只是數字(不是空格和分號),它應該從整個輸入字符串(它是多行)中取出它們。

因此,舉例來說,從該輸入:

5; 
6 ; 
7; 
8 ; 

它應該返回 「5」, 「6」, 「7」 和 「8」。

任何人都知道如何做到這一點在c + +?

謝謝!


編輯:

在評論中提到的鏈接,我想出了這個代碼:

std::regex regex(regex_str, std::regex_constants::icase); 

for (std::sregex_iterator it = std::sregex_iterator(input.begin(), input.end(), regex); it != std::sregex_iterator(); ++it) 
{ 
    std::smatch m = *it; 

    std::cout << "\t" << m[1].str() << std::endl; 
} 

它工作得很好,但有一件事我忘了提:我還需要獲得每個捕獲的位置。使用m.position()我可以獲得整場比賽的位置,但是如果在我正在尋找的捕獲組之前有什麼東西,它會告訴我一個錯誤的位置。那麼,我怎樣才能獲得捕獲的位置呢?

+0

請出示你的代碼。我相信你可以通過'match_object [1] .str()'來訪問捕獲的值。 –

+1

要獲得多個匹配,有多個方法。看到[這個答案](http://stackoverflow.com/questions/32765512/what-does-stdmatch-resultssize-return/32765645#32765645)爲例如如何可以完成。 –

回答

0

您可以使用regex_token_iterator來實現自己的目標:

#include <regex> 
#include <iostream> 
using namespace std; 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    std::string strExample = "5\n 6\n\t7 ; 8; 10"; 
    std::regex re("\\d+"); 

    for (std::sregex_token_iterator it(strExample.cbegin(), strExample.cend(), re); it != std::sregex_token_iterator(); ++it) 
    { 
     std::cout << *it << endl; 
    } 

    return 0; 
} 
+0

OP不需要獲取所有的數字,只有那些後面帶有可選空白和分號的數字。另外,爲什麼不爲模式聲明使用原始字符串文字? –

+0

爲什麼?重讀他的帖子。對於給定的輸入,它應該返回所有數字5,6,7,8。 – CodeFuller

+0

是的,如果字符串包含'56書籍;''56'不應該在結果中。 –

相關問題