使用std::regex 匹配多個結果
使用std::regex 匹配多個結果可以是提取多個片段的便捷方法在單一操作中從字串中獲取資料。但是,提供的正規表示式「(bS*b){0,}」不適合用於匹配字串「first Second Third Fourth」中的每個單字。
解:
原始正規表示式的問題是量詞 {0,} 符合零次或多次,這使得模式可以符合空字串。相反,應使用匹配一次或多次的量詞,例如“{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中文網其他相關文章!