c++ - 如何使用 std::regex 匹配多个结果

标签 c++ regex

例如,如果我有一个像“first second third Fourth”这样的字符串,并且我想在一次操作中匹配每个单词以逐个输出。

我只是认为 "(\\b\\S*\\b){0,}" 会起作用。但实际上并没有。

我该怎么办?

这是我的代码:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    regex exp("(\\b\\S*\\b)");
    smatch res;
    string str = "first second third forth";
    regex_search(str, res, exp);
    cout << res[0] <<" "<<res[1]<<" "<<res[2]<<" "<<res[3]<< endl;
}   

最佳答案

在 regex_searching 时简单地迭代你的字符串,像这样:

{
    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;
}

关于c++ - 如何使用 std::regex 匹配多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21667295/

相关文章:

c++ - 来自 C++ 代码的 Shell 命令

c++ - Doxygen 组和模块索引

javascript - 获取jade的正则表达式包括

知名文本的正则表达式

python - 在Python中查找字符串中以逗号分隔的所有数字

javascript - 选择正斜杠之前但任意空格之后的第一个字符

c++ - 作为常规应用程序运行守护进程(在 KDevelop 中调试)

c++ - ds :0023:003a3000=? 是什么? drwatson FAULT 末尾的东西?

c++ - 为什么从 unsigned long long 转换为 double 会导致数据丢失?

java - 文件/扫描仪简单解析问题