使用std::regex 來匹配多個結果
本文討論了一種場景,其中用戶嘗試使用以下命令來匹配給定字串中的每個單字C 標準函式庫正規表示式引擎(std::regex)。使用者使用正規表示式模式「(bS*b)」來實現此目的,但遇到了意外行為。
問題
提供的初始正規表示式模式,「( bS*b)",封裝由單字邊界(b) 和非空白字元(S) 界定的單字。但是,當與 regex_search 函數結合使用時,此模式無法考慮輸入字串中的多個潛在匹配項。
解決方案
要解決此問題,方法是在連續應用 regex_search 的同時需要迭代輸入字串。這確保了可以檢測和捕獲所有匹配項。下面修改後的程式碼示範了這個方法:
{ 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; }
在此修改後的程式碼中,迭代器 searchStart 被初始化為輸入字串的開頭。 regex_search 函數被迭代調用,其中 searchStart 作為搜尋起始位置。如果找到匹配項,則列印匹配項,並將 searchStart 調整到匹配文字後面的位置。此過程一直持續到找不到更多匹配項為止。
以上是如何使用 C 的 std::regex 來匹配字串中的所有單字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!