例如,如果我有一个字符串“first second third forth”,我想在一个操作中匹配每个单词,然后逐个输出。
我只是以为"(\\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;
}
6条答案
按热度按时间q8l4jmvw1#
只需在regex_searching时迭代字符串,如下所示:
f0ofjuux2#
这可以在
C++11
的regex
中完成。两种方法:
1.您可以在
regex
中使用()
来定义捕获(子表达式)。就像这样:
现场观看:http://coliru.stacked-crooked.com/a/e1447c4cff9ea3e7
1.您可以使用
sregex_token_iterator()
:现场观看:http://coliru.stacked-crooked.com/a/677aa6f0bb0612f0
irlmq6kh3#
sregex_token_iterator
似乎是理想的、高效的解决方案,但是在所选答案中给出的示例还有很多需要改进的地方。http://www.cplusplus.com/reference/regex/regex_token_iterator/regex_token_iterator/为了您的方便,我已经复制粘贴了该页面显示的示例代码。我不要求代码的信用。
rslzwgfq4#
您可以使用
suffix()
函数,然后再次搜索,直到找不到匹配项为止:khbbv19g5#
我的代码将捕获所有匹配中的所有组:
hivapdat6#
我对the documentation的阅读是,
regex_search
搜索第一个匹配项,并且std::regex
中的任何函数都不执行您要查找的“扫描”。