首页 > 后端开发 > C++ > 如何使用 C 的 std::regex 匹配字符串中的所有单词?

如何使用 C 的 std::regex 匹配字符串中的所有单词?

Mary-Kate Olsen
发布: 2024-12-11 08:54:09
原创
768 人浏览过

How Can I Match All Words in a String Using C  's std::regex?

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

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