绝对不能在循环中通过regex_search获取模式在源字符串所有的实例;应该改为regex_iterator或则regex_token_iterator,一般情况下需要位一个特定的容器来指定一个尾迭代器,但是在std::regex_iterator 里边直接调用构造函数就会生成一个尾迭代器;例如:
std::regex_iterator end;
而不需要:std::regex_iterator end(std::end(str));
但是为了遍历全部的源字符串,我们需要这样来制定一个首迭代器;
Std::regex_iterator iter(std::begin(str),std::end(str), r );
其中的r是正则表达式;
接下来提取输入的单词
#include <iostream> #include <regex> int main() { std::regex r("[\\w]+"); std::string str; while(true) { if(!std::getline(std::cin,str) || str == "q") { break; }else { //typedef regex_iterator<string::const_iterator> sregex_iterator; const std::sregex_iterator end; for(std::sregex_iterator iter(std::begin(str),std::end(str),r);iter != end;++iter) { std::cout << "\"" << *iter->begin() << "\"" << std::endl; } } } return 0; }
输入:
djsf jkdfn , klj
输出:
"djsf"
"jkdfn"
"klj"