単語、数字、特殊文字を含む文字列内にトークンを見つけようとしています。私は、次のコードを試してみました:特殊文字を含む正規表現を使用してC++文字列をトークン化
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main() {
string str("The ,quick brown. fox \"99\" named quick_joe!");
regex reg("[\\s,.!\"]+");
sregex_token_iterator iter(str.begin(), str.end(), reg, -1), end;
vector<string> vec(iter, end);
for (auto a : vec) {
cout << a << ":";
}
cout << endl;
}
をそして次の出力ました:
The:quick:brown:fox:99:named:quick_joe:
をしかし、私は出力を望んでいた:
私はそのために使用する必要がありますどのような正規表現The:,:quick:brown:.:fox:":99:":named:quick_joe:!:
?可能であれば、私は標準のC++に固執したいと思います。すなわち、私はブーストのあるソリューションが気に入らないでしょう。
(この質問のJavaのバージョンの43594465を参照してください、しかし、今、私はC++ソリューションを探しています。だから、基本的に、問題はC++にJavaのマッチャーとパターンをマッピングする方法である。)
あなたの現在の正規表現の問題は、あなたが分割したいすべての可能な特殊文字を欠いています。文字クラスにすべてを追加するか、Jeffのコードで 'reg(R"(\ s *(\ W)\ s *) ")'を使用する必要があります(すべてのUnicode文字/数字がここで問題にならない場合)。鉱山とジェフのアプローチはASCII入力のみでOKです。 –