博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Boost Regex 的regex_search进行遍历搜索
阅读量:7050 次
发布时间:2019-06-28

本文共 1325 字,大约阅读时间需要 4 分钟。

在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] 
 
  1. #include <string>  
  2. #include <iostream>  
  3. #include <boost\regex.hpp>  
  4. int main()  
  5. {  
  6.     std::string str = "192.168.1.1";  
  7.   
  8.     boost::regex expression("\\d+");  
  9.     boost::smatch what;  
  10.   
  11.     std::string::const_iterator start = str.begin();  
  12.     std::string::const_iterator end = str.end();  
  13.     while ( boost::regex_search(start, end, what, expression) )  
  14.     {  
  15.         std::cout << what[0] << std::endl;  
  16.         start = what[0].second;  
  17.     }  
  18.     return 0;  
  19. }  
结果如下:

 

 

[plain] 
 
  1. 192  
  2. 168  
  3. 1  
  4. 1  

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

 

[cpp] 
 
  1. #include <string>  
  2. #include <iostream>  
  3. #include <boost\regex.hpp>  
  4. int main()  
  5. {  
  6.     std::string str = "192.168.1.1";  
  7.   
  8.     boost::regex expression("\\d+");  
  9.     boost::sregex_iterator it(str.begin(), str.end(), expression);  
  10.     boost::sregex_iterator end;  
  11.     for (; it != end; ++it)  
  12.         std::cout << *it << std::endl;  
  13.   
  14.     return 0;  
  15. }  
效果与上一例相同。
 
如果不需要遍历,只需要匹配,那更简单:
    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;
    }
}

转载地址:http://lydol.baihongyu.com/

你可能感兴趣的文章
android 备忘录之简单实现
查看>>
误删除libc.so.6的解决方法
查看>>
rsync+nfs+inotify
查看>>
我的友情链接
查看>>
处理vShpere中无法正常结束的任务的方法
查看>>
android开发的一些技巧和坑
查看>>
Canvas 的save()与 restore()的详细介绍
查看>>
我的友情链接
查看>>
了解KVM切换器的四种类形
查看>>
composer
查看>>
PS切图
查看>>
剑指Offer面试题:连续子数组的最大和
查看>>
设计一个算法,找出二叉树中某两个结点的第一个公共祖先.。不得将额外的结点存储在另外的数据结构中。注意:这不一定是二叉查找树。...
查看>>
新加坡美食流水账~
查看>>
linux 常用
查看>>
C#学习基本概念之方法
查看>>
C#学习基础---CategoryAttribute类
查看>>
keepalived基于双主模型实现nginx的高可用(2)
查看>>
Depends查依赖工具
查看>>
SSH Tunnel隧道
查看>>