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

C の std::regex を使用して文字列から複数の正規表現一致を効率的に抽出するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-29 21:23:11
オリジナル
413 人が閲覧しました

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

std::regex を使用した複数の正規表現結果の照合

文字列内の正規表現パターンの複数の出現の照合は、std を使用して実現できます。 :正規表現ライブラリ。 1 回の操作で文字列「first Second third four」からすべての単語を抽出したいシナリオを考えてみましょう。

「(bS*b){0,}」を使用しようとした最初の試みでは、繰り返し演算子 {0,} が 0 回以上 (ゼロを含む) 一致するため、目的の出力が得られず、空の一致が発生します。

この問題に対処するには、遅延反復と呼ばれる手法を使用できます。これには、正規表現検索を実行しながら文字列を反復処理することが含まれます。コード例を次に示します。

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

int main() {
    std::regex exp("(\b\S*\b)");
    std::smatch res;
    std::string str = "first second third forth";

    std::string::const_iterator searchStart(str.cbegin());
    while (std::regex_search(searchStart, str.cend(), res, exp)) {
        std::cout << (searchStart == str.cbegin() ? "" : " ") << res[0];
        searchStart = res.suffix().first;
    }
    std::cout << std::endl;
}
ログイン後にコピー

このコードでは、次の一致候補の開始点を表す searchStart を使用して文字列をループします。一致が成功するたびに、searchStart が一致した部分文字列の末尾に更新されます。これにより、文字列全体が処理されるまで、後続の一致の検索を続けることができます。このコードの出力は次のとおりです:

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

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

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