5

検索しましたが、何も見つかりませんでした。答えが他の誰かに明白である可能性に私の時間をもう無駄にしないために、私はここで尋ねています。これまでに有用だったサイトはこれだけです:http ://softwareramblings.com/2008/07/regular-expressions-in-c.htmlしかし、サンプルはあまりにも単純すぎます。VisualStudio2010を使用しています。

#include <regex>

[...]

string seq = "Some words. And... some punctuation.";
regex rgx("\w");

smatch result;
regex_search(seq, result, rgx);

for(size_t i=0; i<result.size(); ++i){
    cout << result[i] << endl;
}

期待される出力は次のようになります。

いくつかの
単語

いくつかの
句読点

ありがとう。

4

2 に答える 2

5

ここにいくつかのことがあります。

まず、正規表現文字列を\エスケープする必要があります。結局のところ、それはまだC++文字列です。

regex rgx("\\w");

また、正規表現は\w1つの「単語文字」にのみ一致します。単語全体を照合する場合は、次を使用する必要があります。

regex rgx("\\w+");

最後に、考えられるすべての一致を反復処理するには、反復子を使用する必要があります。完全な実例を次に示します。

#include <regex>
#include <string>
#include <iostream>
using namespace std;

int main()
{
    string seq = "Some words. And... some punctuation.";
    regex rgx("\\w+");

    for( sregex_iterator it(seq.begin(), seq.end(), rgx), it_end; it != it_end; ++it )
        cout << (*it)[0] << "\n";
}
于 2011-01-28T06:45:45.163 に答える
1

これを試して:

string seq = "Some words. And... some punctuation.";
regex rgx("(\\w+)");

regex_iterator<string::iterator> it(seq.begin(), seq.end(), rgx);
regex_iterator<string::iterator> end;

for (; it != end; ++it)
{
    cout << it->str() << endl;
}
于 2011-01-28T06:38:12.550 に答える