• 使用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;
        }
    }
  • 相关阅读:
    python,selenium遇到的问题
    python环境配置
    性能测试函数
    性能测试的关注点
    环境配置
    性能监控工具使用
    linux路径
    linux权限
    自动化测试工具
    书籍
  • 原文地址:https://www.cnblogs.com/liaocheng/p/4390536.html
Copyright © 2020-2023  润新知