#include <regex>
[...]
string seq = "Some words. And... some punctuation.";
regex rgx("\w");
smatch result;
regex_search(seq, result, rgx);
for(size_t i=0; i<result.size(); ++i){
cout << result[i] << endl;
}
预期输出为:
一些
也就是说
和
一些
标点符号
感谢。
答案 0 :(得分:5)
这里有一些事情。
首先,您的正则表达式字符串需要转义\
。毕竟它仍然是一个C ++字符串。
regex rgx("\\w");
此外,正则表达式\w
只匹配一个“单词字符”。如果要匹配整个单词,则需要使用:
regex rgx("\\w+");
最后,为了迭代所有可能的匹配,那么你需要使用迭代器。这是一个完整的工作示例:
#include <regex>
#include <string>
#include <iostream>
using namespace std;
int main()
{
string seq = "Some words. And... some punctuation.";
regex rgx("\\w+");
for( sregex_iterator it(seq.begin(), seq.end(), rgx), it_end; it != it_end; ++it )
cout << (*it)[0] << "\n";
}
答案 1 :(得分:1)
试试这个:
string seq = "Some words. And... some punctuation.";
regex rgx("(\\w+)");
regex_iterator<string::iterator> it(seq.begin(), seq.end(), rgx);
regex_iterator<string::iterator> end;
for (; it != end; ++it)
{
cout << it->str() << endl;
}