regex_iterator

绝对不能在循环中通过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 ;
}

输入:

djsf jkdfn , klj

输出:

"djsf"
"jkdfn"
"klj"

上一篇:Android apk 的安装过程


下一篇:A框架 第三步 先加载父类,如果加载子类.立马报错.里面继承的父类还没有导入