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