ホームページ > バックエンド開発 > C++ > C の std::regex を使用して文字列内のすべての単語を照合するにはどうすればよいですか?

C の std::regex を使用して文字列内のすべての単語を照合するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-11 08:54:09
オリジナル
744 人が閲覧しました

How Can I Match All Words in a String Using C  's std::regex?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート