C++中使用regex_search查找多个组的问题
“adsfaf-ad4235sfasdf-adf56adf-fdfg-asf”类似这样一组用横杠隔开的字符串,横杠的数量不确定,要把所有两个横杠之间的内容分别取出来。代码...
“adsfaf-ad4235sfasdf-adf56adf-fdfg-asf”类似这样一组用横杠隔开的字符串,横杠的数量不确定,要把所有两个横杠之间的内容分别取出来。代码如下:
int main()
{
regex r("((?<=-)[^-]+)");
string in(adsfaf-ad4235sfasdf-adf56adf-fdfg-asf);
cmatch what;
if(regex_search(in.c_str(),what,r))
{
for(int i=0;i<what.size();i++)
{
cout<<"str:"<<what[i].str()<<endl;
}
}
return 0;
}
为什么输出的只有第一个横杠之后和第二个横杠之间的内容? 展开
int main()
{
regex r("((?<=-)[^-]+)");
string in(adsfaf-ad4235sfasdf-adf56adf-fdfg-asf);
cmatch what;
if(regex_search(in.c_str(),what,r))
{
for(int i=0;i<what.size();i++)
{
cout<<"str:"<<what[i].str()<<endl;
}
}
return 0;
}
为什么输出的只有第一个横杠之后和第二个横杠之间的内容? 展开
2个回答
展开全部
你想要的大概是下面的代码(既然在用正则表达式,那编译器应该支持c++11咯?)
#include <regex>
#include <string>
#include <iostream>
int main(){
std::regex r("([^-]+)-?");
std::string in("adsfaf-ad4235sfasdf-adf56adf-fdfg-asf");
for (std::sregex_iterator p(in.cbegin(), in.cend(), r), q; p != q; ++p){
std::cout << "str: " << p->format("$1") << "\n";
}
return 0;
}
你调用的函数只匹配一次,所以只输出第一个字符串。
更多追问追答
追问
感谢回答,我用的是VC6.0。平时也很少写程序,所以有不少地方都是一知半解,基础也很差。regex是我在网上下的boost的库然后在VC6上编译了一下。这段代码在VC6上能用么? for循环条件里边的那个P是什么意思?
追答
boost库使用下面的代码
#include <boost/regex.hpp>
#include <string>
#include <iostream>
int main(){
boost::regex r("([^-]+)-?");
std::string in("adsfaf-ad4235sfasdf-adf56adf-fdfg-asf");
for (boost::sregex_iterator p(in.cbegin(), in.cend(), r), q; p != q; ++p){
std::cout << "str: " << p->format("$1") << "\n";
}
return 0;
}
p的含义参见boost库的文档http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/boost_regex/ref/regex_iterator.html
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询