使用std::regex 匹配多個結果:有效的解決方案
使用std:: 從字串中提取多個匹配單字時遇到困難:正規表示式?一個常見的誤解是使用模式“(bS*b){0,}”在單一操作中匹配單字。但是,由於模式中存在可選量詞 {0,},此方法存在不足之處。
解決挑戰
要解決此問題並使用以下命令成功匹配多個結果std::regex,避免使用可選量詞至關重要。相反,請考慮以下程式碼:
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;
了解解決方案
此更新的方法涉及在重複執行 regex_search 時迭代輸入字串。它初始化字串中的搜尋起始位置並繼續匹配模式,直到找不到更多匹配項。每次成功的配對都會將搜尋起始位置更新為緊接在配對單字之後的位置。
此方法的優點
此最佳化的解決方案無需使用捕獲組。它更有效率,並確保輸入字串中的所有單字都被提取並在輸出中用空格分隔。
以上是如何使用 std::regex 從字串中高效提取多個匹配單字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!