zoukankan      html  css  js  c++  java
  • 使用Boost Regex 的regex_search进行遍历搜索

    在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在CODE上查看代码片派生到我的代码片
     
    1. #include <string>  
    2. #include <iostream>  
    3. #include <boost egex.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] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. 192  
    2. 168  
    3. 1  
    4. 1  

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

    [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. #include <string>  
    2. #include <iostream>  
    3. #include <boost egex.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;
        }
    }
  • 相关阅读:
    Docker学习笔记07_网络配置
    Docker学习笔记06_部署appache+tomcat+redis+mongo+python
    Docker学习笔记05_部署nginx+php+mysql+phpmyadmin
    Docker学习笔记04_镜像管理
    Docker学习笔记03_容器的简单应用
    Docker学习笔记02_基本操作
    Docker学习笔记01_CentOS 7安装Docker
    Cisco Ironport ESA配置拒收黑名单
    CentOS 7安装Cobra
    jvm内存模型、常见参数及调优
  • 原文地址:https://www.cnblogs.com/liaocheng/p/4390536.html
Copyright © 2011-2022 走看看