绝对不能在循环中通过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"
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步