您的位置:首页 > 其它

使用Boost Regex 的regex_search进行遍历搜索

2015-04-03 16:59 561 查看

在regex_search函数中,会将找到的第一个匹配结果保存到一个smatch类中。

然而如果搜索字符串中有多个匹配结果,则需要自己实现了。

在smatch中,有两个成员,官方文档如下:

iterator first:

An iterator denoting the position of the start of the match.

iterator second

An iterator denoting the position of the end of the match.

所以,使用如下方法,可以得到遍历搜索:

[cpp] view plaincopy





#include <string>

#include <iostream>

#include <boost\regex.hpp>

int main()

{

std::string str = "192.168.1.1";

boost::regex expression("\\d+");

boost::smatch what;

std::string::const_iterator start = str.begin();

std::string::const_iterator end = str.end();

while ( boost::regex_search(start, end, what, expression) )

{

std::cout << what[0] << std::endl;

start = what[0].second;

}

return 0;

}

结果如下:

[plain] view plaincopy





192

168

1

1

在boost中,还提供了一种迭代器的方法,名称为:sregex_iterator,默认构造器会生成一个结束迭代器。用法如下:

[cpp] view plaincopy





#include <string>

#include <iostream>

#include <boost\regex.hpp>

int main()

{

std::string str = "192.168.1.1";

boost::regex expression("\\d+");

boost::sregex_iterator it(str.begin(), str.end(), expression);

boost::sregex_iterator end;

for (; it != end; ++it)

std::cout << *it << std::endl;

return 0;

}

效果与上一例相同。

如果不需要遍历,只需要匹配,那更简单:
boost::regex reg( szReg );
bool r=boost::regex_match( szStr , reg);
或是需要放入一个cmatch 中:
{
boost::cmatch mat;
boost::regex reg( "\\d+" ); //查找字符串里的数字
if(boost::regex_search(szStr, mat, reg))
{
cout << "searched:" << mat[0] << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: