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

来源:互联网 发布:it资讯网 编辑:程序博客网 时间:2024/06/08 02:49

在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.

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

#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;}

结果如下:

19216811

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

#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;}

效果与上一例相同。

1 0