• 【正则表达式1】C++11正则表达式


    https://www.cnblogs.com/pukaifei/p/5546968.html

    【正则表达式1】C++11正则表达式

     

    头文件

    #include <regex>

    regex_match:整个字符串是否匹配

    复制代码
        regex reg1("\w+day");
        string s1 = "saturday";
        string s2 = "saturday and sunday";
        smatch r1;
        smatch r2;
        cout << boolalpha << regex_match(s1, r1, reg1) << endl;  //true
        cout << boolalpha << regex_match(s2, r2, reg1) << endl;  //false
        cout << "s1匹配结果:" << r1.str() << endl;          //saturday
        cout << "s2匹配结果:" << r2.str() << endl;          //空
        cout << endl;
    复制代码

    regex_match:只返回第一个匹配结果

    复制代码
        smatch rr1;
        smatch rr2;
        cout << boolalpha << regex_search(s1, rr1, reg1) << endl;  //true
        cout << "s1匹配结果:" << rr1.str() << endl;           //saturday
        cout << boolalpha << regex_search(s2, rr2, reg1) << endl;  //true
        cout << "s1匹配结果:" << rr2.str() << endl;           //saturday
        cout << endl;
    复制代码

    iterator:返回多个匹配结果

    类似于指针,调用成员要用"->"

    复制代码
        cout << "iterator结果:" << endl;
        sregex_iterator it(s2.begin(), s2.end(), reg1);
        sregex_iterator end;
        for(; it != end; ++it)
        {
            cout << it->str() << endl;
            //cout << *it << endl; 错误
        }
    
        cout << "token_iterator结果:" << endl;
        sregex_token_iterator tit(s2.begin(), s2.end(), reg1);
        sregex_token_iterator tend;
        for(; tit != tend; ++tit)
        {
            cout << tit->str() << endl;
            cout << *tit << endl;
        }
    复制代码

    子表达式匹配

    复制代码
        regex reg2("(\d{1,3}):(\d{1,3}):(\d{1,3}):(\d{1,3})");
        string ip = "0:11:222:333";
        smatch m; 
        regex_match(ip, m, reg2);
        cout << "输出:str()" << endl;
        cout << m.str() << endl;   //0:11:222:333
        cout << m.str(1) << endl;  //0
        cout << m.str(2) << endl;  //11
        cout << m.str(3) << endl;  //222
        cout << m.str(4) << endl;  //333
    
        cout << "输出:[i]" << endl; //结果同上
        cout << m[0] << endl;
        cout << m[1] << endl;
        cout << m[2] << endl;
        cout << m[3] << endl;
        cout << m[4] << endl;
    复制代码

    多个匹配结果

    复制代码
        string ip2 = "0:11:222:333 4:55:66:7";
        sregex_iterator ip_it(ip2.begin(), ip2.end(), reg2);
        sregex_iterator ip_end;
        for(; ip_it != ip_end; ++ip_it)
        {
            cout << ip_it->str() << endl;
            cout << ip_it->str(1) << endl;
            cout << ip_it->str(2) << endl;
            cout << ip_it->str(3) << endl;
            cout << ip_it->str(4) << endl;
        }
    复制代码

    总的程序:

    #include <iostream>
    #include <string>
    #include <regex>
    using namespace std;
    
    int main()
    {
        //regex_match匹配整个字符串
        regex reg1("\w+day");
        string s1 = "saturday";
        string s2 = "saturday and sunday";
        smatch r1;
        smatch r2;
        cout << boolalpha << regex_match(s1, r1, reg1) << endl;
        cout << boolalpha << regex_match(s2, r2, reg1) << endl;
        cout << "s1匹配结果:" << r1.str() << endl;
        cout << "s2匹配结果:" << r2.str() << endl;
        cout << endl;
    
        //regex_match只返回第一个匹配结果
        smatch rr1;
        smatch rr2;
        cout << boolalpha << regex_search(s1, rr1, reg1) << endl;
        cout << "s1匹配结果:" << rr1.str() << endl;
        cout << boolalpha << regex_search(s2, rr2, reg1) << endl;
        cout << "s1匹配结果:" << rr2.str() << endl;
        cout << endl;
    
    
        //使用iterator返回多个匹配结果
        //结果要用->
        cout << "iterator结果:" << endl;
        sregex_iterator it(s2.begin(), s2.end(), reg1);
        sregex_iterator end;
        for(; it != end; ++it)
        {
            cout << it->str() << endl;
            //cout << *it << endl; 错误
        }
    
        cout << "token_iterator结果:" << endl;
        sregex_token_iterator tit(s2.begin(), s2.end(), reg1);
        sregex_token_iterator tend;
        for(; tit != tend; ++tit)
        {
            cout << tit->str() << endl;
            cout << *tit << endl;
        }
    
        //子表达式匹配
        regex reg2("(\d{1,3}):(\d{1,3}):(\d{1,3}):(\d{1,3})");
        string ip = "0:11:222:333";
        smatch m; 
        regex_match(ip, m, reg2);
        cout << "输出:str()" << endl;
        cout << m.str() << endl;
        cout << m.str(1) << endl;
        cout << m.str(2) << endl;
        cout << m.str(3) << endl;
        cout << m.str(4) << endl;
    
        cout << "输出:[i]" << endl;
        cout << m[0] << endl;
        cout << m[1] << endl;
        cout << m[2] << endl;
        cout << m[3] << endl;
        cout << m[4] << endl;
    
        //输出结果同上
        //regex_search(ip, m, str2);
        cout << endl;
        string ip2 = "0:11:222:333 4:55:66:7";
        sregex_iterator ip_it(ip2.begin(), ip2.end(), reg2);
        sregex_iterator ip_end;
        for(; ip_it != ip_end; ++ip_it)
        {
            cout << ip_it->str() << endl;
            cout << ip_it->str(1) << endl;
            cout << ip_it->str(2) << endl;
            cout << ip_it->str(3) << endl;
            cout << ip_it->str(4) << endl;
        }
    
        return 0;
    
    }
    View Code

    参考:

    http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438191.html

    http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438215.html

     
    jpg改rar
  • 相关阅读:
    详解go语言的array和slice 【一】
    node.js 事件循环
    搭建Docker私有仓库--自签名方式
    详解JavaScript闭包
    [个人翻译]Redis 集群教程(下)
    转:CMake 使用方法
    转: Ogre实现无缝地图要改的地方 记下来 用的时候可以看
    转:ogre的编译及安装
    转:Ogre TerrainGroup地形赏析
    转:如何编译delta3d
  • 原文地址:https://www.cnblogs.com/kuangke/p/9524613.html
Copyright © 2020-2023  润新知