使用 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中文网其他相关文章!