2016-04-07 85 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'不应该在结果中。 –

相关问题