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