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

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

Barbara Streisand
リリース: 2024-12-15 08:17:16
オリジナル
450 人が閲覧しました

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

std::regex を使用した複数の結果のマッチング

std::regex を使用した複数の結果のマッチングは、複数の結果を抽出する便利な方法です。 1 回の操作で文字列からデータを取得します。ただし、指定された正規表現 "(bS*b){0,}" は、文字列 "first Second third four" 内のすべての単語の一致には適していません。

解決策:

元の正規表現の問題は、量指定子 {0,} が 0 回以上一致するため、パターンが空の文字列と一致する可能性があることです。代わりに、「{1,}」や「」など、1 回以上一致する量指定子を使用する必要があります。

さらに、文字列内の各単語と一致するには、正規表現を繰り返し適用する必要があります。 、前回の一致後の位置から毎回検索します。これは、文字列を反復処理する regex_search のループを使用して実現できます。

改訂されたコード:

必要な変更を実装した改訂されたコードは次のとおりです:

#include <iostream>
#include <string>
#include <regex>
using namespace std;

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;
}
ログイン後にコピー

このコードは、正規表現を文字列に繰り返し適用し、一致する各単語をスペースで区切って出力します。出力は次のようになります:

first second third forth
ログイン後にコピー

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

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