std::regex を使用した複数の結果の照合
この記事では、ユーザーが次を使用して指定された文字列内のすべての単語を照合しようとするシナリオについて説明します。 C 標準ライブラリ正規表現エンジン (std::regex)。ユーザーはこれを実現するために正規表現パターン "(bS*b)" を使用しますが、予期しない動作が発生します。
問題
最初に提供された正規表現パターン "( bS*b)" は、単語境界 (b) と非空白文字 (S) で囲まれた単語をカプセル化します。ただし、regex_search 関数と組み合わせると、このパターンは入力文字列内の複数の一致の可能性を考慮できなくなります。
解決策
この問題に対処するには、次のようにします。 regex_search を継続的に適用しながら、入力文字列を反復処理する必要があります。これにより、すべての一致を検出してキャプチャできることが保証されます。以下の変更されたコードは、このアプローチを示しています。
{ 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; }
この変更されたコードでは、反復子 searchStart が入力文字列の先頭に初期化されます。 regex_search 関数は、searchStart を検索開始位置として繰り返し呼び出されます。一致するものが見つかった場合は、一致した内容が出力され、一致したテキストの後の位置に searchStart が調整されます。このプロセスは、一致するものが見つからなくなるまで続きます。
以上がC の std::regex を使用して文字列内のすべての単語を照合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。