首页 > 后端开发 > C++ > 如何使用 C 的 std::regex 从字符串中高效地提取多个正则表达式匹配项?

如何使用 C 的 std::regex 从字符串中高效地提取多个正则表达式匹配项?

Linda Hamilton
发布: 2024-11-29 21:23:11
原创
413 人浏览过

How Can I Efficiently Extract Multiple Regex Matches from a String Using C  's std::regex?

使用 std::regex 匹配多个正则表达式结果

可以使用 std 来匹配字符串中正则表达式模式的多次出现: :正则表达式库。考虑这样一个场景,我们希望在一次操作中从字符串“first Second Third Fourth”中提取每个单词。

最初尝试使用“(bS*b){0,}”并没有得到所需的输出,因为重复运算符 {0,} 匹配零个或多个匹配项(包括无匹配项),从而导致空匹配。

为了解决此问题,我们可以采用一种称为延迟迭代的技术。这涉及在执行正则表达式搜索时迭代字符串。下面是一个示例代码:

#include <iostream>
#include <string>
#include <regex>

int main() {
    std::regex exp("(\b\S*\b)");
    std::smatch res;
    std::string str = "first second third forth";

    std::string::const_iterator searchStart(str.cbegin());
    while (std::regex_search(searchStart, str.cend(), res, exp)) {
        std::cout << (searchStart == str.cbegin() ? "" : " ") << res[0];
        searchStart = res.suffix().first;
    }
    std::cout << std::endl;
}
登录后复制

在此代码中,我们使用 searchStart 循环遍历字符串,它表示下一个潜在匹配的起点。每次成功匹配后,searchStart 都会更新到匹配子字符串的末尾。这使我们能够继续搜索后续匹配项,直到处理完整个字符串。该代码的输出是:

first second third forth
登录后复制

以上是如何使用 C 的 std::regex 从字符串中高效地提取多个正则表达式匹配项?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板