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