std::regex を使用した複数の結果の照合: 効果的な解決策
std:: を使用して文字列から複数の一致した単語を抽出する際に問題が発生しました。正規表現?よくある誤解は、パターン "(bS*b){0,}" を使用して 1 回の操作で単語を一致させるというものです。ただし、パターン内にオプションの数量子 {0,} があるため、このアプローチは不十分です。
課題への対処
この問題に対処し、複数の結果を正常に照合するには、次を使用します。 std::regex では、オプションの量指定子の使用を控えることが重要です。代わりに、次のコードを検討してください。
regex exp("(\b\S*\b)"); smatch res; string str = "first second third forth"; string::const_iterator searchStart( str.cbegin() ); while ( regex_search( searchStart, str.cend(), res, exp ) ) { cout << ( searchStart == str.cbegin() ? "" : " " ) << res[0]; searchStart = res.suffix().first; } cout << endl;
解決策を理解する
この更新されたアプローチには、regex_search を繰り返し実行しながら入力文字列を反復処理することが含まれます。文字列内の検索開始位置を初期化し、一致するものがなくなるまでパターンの一致を続けます。一致が成功するたびに、検索開始位置が一致した単語の直後の位置に更新されます。
このアプローチの利点
この最適化されたソリューションにより、キャプチャ グループを使用する必要がなくなります。これはより効率的であり、入力文字列内のすべての単語が抽出され、出力内でスペースで区切られるようになります。
以上がstd::regex を使用して文字列から複数の一致する単語を効率的に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。