zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    Eighth scrum meeting
    Seventh scrum meeting
    Sixth scrum meeting
    Fifth scrum meeting
    Forth scrum meeting
    Third scrum meeting
    2019-07-25 L430 生物 GPS
    L429 Why Do Smart People Do Foolish Things?
    L427 长难句
    L426
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/14468688.html
Copyright © 2011-2022 走看看