2016-04-07 6 views
-1

私は数日間これをやろうとしてきましたが、それでも正しい結果は得られません。正規表現 - 複数の行とその位置で複数のキャプチャを取得する

文字列全体(改行を含む)からすべてのキャプチャを取得する必要がありますが、最初のマッチの後には戻っていません。私はこの正規表現を持っています:(\d+)\s*;。結果は数字だけでなければならず(スペースやセミコロンではない)、入力文字列全体(複数行の文字列)から取得する必要があります。

したがって、例えば、この入力から:

5; 
6 ; 
7; 
8 ; 

これは "5" を返す必要があり、 "6"、 "7" 及び "8"。

誰でもC++でそれを行う方法を知っていますか?

ありがとうございます!


EDIT:コメントで言及リンクから

が、私はこのコードを思い付いた:

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; 
} 

それはうまく動作しますが、私は言及を忘れてしまった一つのことがある:Iまた、すべてのキャプチャの位置を取得する必要があります。使用するm.position()私は全体のマッチの位置を得ることができますが、私が探しているキャプチャグループの前に何かがある場合、それは私に間違った位置を教えてくれます。だから、私はどのようにキャプチャの位置を得ることができますか?

+0

あなたのコードを表示してください。私は 'match_object [1] .str()'でキャプチャされた値にアクセスできると確信しています。 –

+1

複数の一致を得るには、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'は結果に含まれてはいけません。 –

関連する問題