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