• C++ 正则使用


    C++ 正则使用

    C++的正则支持是在C++11中才支持的,需要引用头文件,这里做个用法记录。

    #include<regex>
    

    正则表达式声明

    regex pattern("\d{3}");
    regex pattern2("\d{3}", regex::icase); //忽略大小写
    

    regex_match

    match是全文匹配,要求整个字符串符合匹配规则。

    cout << regex_match("123", regex("\d")) << endl; //结果为0
    cout << regex_match("123", regex("\d+")) << endl; //结果为1
    

    更多时候,我们是希望得到匹配的结果。

    string str = "hello_2021"; 
    	::smatch result;
    	::regex pattern("([a-z]{5})_(\d{4})");
    	if (::regex_match(str, result, pattern))
    	{
    		cout << result.size() << endl;//匹配到的组数量
    		cout << result[0] << endl; //完整匹配结果
    		cout << result[1] << endl; //第一组匹配的数据
    		cout << result[2] << endl; //第二组匹配的数据
    		//第二种显示形式
    		cout << result.str() << endl; //完整结果
    		cout << result.str(1) << endl; //第一组匹配的数据
    		cout << result.str(2) << endl; //第二组匹配的数据
    	}
    

    search是搜索匹配,搜索字符串中存在符合规则的子字符串。

    cout << ::regex_match("123", ::regex("\d")) << endl; //返回0
    cout << ::regex_search("123", ::regex("\d")) << endl; //返回1
    

    输出匹配到的字符

    string str = "hello 2019, ni hao 2020, tai hao 2021";
    ::smatch result;
    regex pattern("\d{4}");
    string::const_iterator iterStart = str.begin();
    string::const_iterator iterEnd = str.end();
    while (regex_search(iterStart, iterEnd, result, pattern))
    {
        string temp = result[0];
        cout << temp << endl;
        iterStart = result[0].second;
    }
    

    举个实际的例子:

    string input = "rtsp://10.117.12.2:9554/app/stream";
    ::regex pattern("([0-9.]+){4}");//匹配input中的IP地址提取
    ::smatch result;
    if (regex_search(input, result, pattern))
    {
        cout << result.str() << endl; //输出10.117.12.2
    }
    

    regex_replace

    replace是替换匹配,可以将符合匹配规则的子字符串替换为其它字符串。

    string str = "hello_2021";
    ::regex pattern("hello");
    cout << regex_replace(str, pattern, "") << endl; //输出为_2021,将hello替换为""
    cout << regex_replace(str, pattern, "world") << endl; //输出为world_2021
    
  • 相关阅读:
    CentOS下Apache开启Rewrite功能
    CentOS下Apache配置多域名或者多端口映射
    CentOS配置SVN服务器
    Windows下Apache配置域名
    PHP 返回13位时间戳
    主成分分析(PCA)特征选择算法详解
    均值、方差、标准差及协方差、协方差矩阵详解
    Jackson序列化日期类型的属性
    监控JVM内存使用情况,剩余空间小于2M时报警
    java 7中新增的CPU和负载的监控
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/14468688.html
Copyright © 2020-2023  润新知