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

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

DDD
DDDオリジナル
2024-11-29 12:51:11309ブラウズ

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

std::regex を使用した複数の結果の照合

正規表現を使用すると、文字列内で複数出現する単語を照合するのが難しい場合があります。式「(bS*b){0,}」は文字列内のすべての連続する単語に一致するように見えますが、目的の出力が得られない可能性があります。代わりに、反復的なアプローチをお勧めします。

以下は修正されたコードです:

#include <iostream>
#include <string>
#include <regex>

int main() {
    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;

    return 0;
}

この更新されたコードでは、正規表現検索を実行しながら while ループを使用して文字列を反復処理します。ループは、searchStart イテレータを文字列の先頭に設定することで開始されます。次に、各反復内で:

  1. regex_search 関数は、searchStart で始まる部分文字列内で最初に出現するパターンを検索します。
  2. 一致するものが見つかった場合は、一致する単語を出力します。 .
  3. 一致した後に検索を開始するように searchStart イテレータを更新します。 word.

一致するものが見つからなくなるまで文字列を反復処理することで、すべての単語を 1 つずつ出力できます。

以上がC の `std::regex` を使用して文字列内の複数の単語を効率的に照合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。