欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++11正則表達(dá)式詳解(regex_match、regex_search和regex_replace)

 更新時間:2022年09月29日 08:59:12   作者:林夕07  
正則表達(dá)式(regular expression)是計算機(jī)科學(xué)中的一個概念,又稱規(guī)則表達(dá)式,下面這篇文章主要介紹了C++11正則表達(dá)式(regex_match、regex_search和regex_replace)的相關(guān)資料,需要的朋友可以參考下

在C++11中引入了正則表達(dá)式。

字符規(guī)則

先來了解一下這個字符的含義吧。

字符描述
\轉(zhuǎn)義字符
$匹配字符行尾
*匹配前面的子表達(dá)式任意多次
+匹配前面的子表達(dá)式一次或多次
?匹配前面的子表達(dá)式零次或一次
{m}匹配確定的m次
{m,}匹配至少m次
{m,n}最少匹配m次,最大匹配n次
字符描述
.匹配任意字符
x|y匹配x或y
[xyz]字符集合,匹配包含的任意一個字符
[^xyz]匹配未包含的任意字符
[a-z]字符范圍,匹配指定范圍內(nèi)的任意字符
[^a-z]匹配任何不在指定范圍內(nèi)的任意字符

頭文件:#include

regex_match

全文匹配,即要求整個字符串符合匹配規(guī)則,返回true或false

匹配“四個數(shù)字-一個或倆個數(shù)字”

#include <iostream>
#include <regex>
using namespace std;
 
int main()
{
    string str;
    cin >> str;
    //\d 表示匹配數(shù)字  {4} 長度4個   \d{1,2}表示匹配數(shù)字長度為1-2
    cout << regex_match(str, regex("\\d{4}-\\d{1,2}"));
    return 0;
}

匹配郵箱 “大小寫字母或數(shù)字@126/163.com”

int main()
{
    string str;
    cout << "請輸入郵箱:" << endl;
    while (cin >> str)//匹配郵箱
    {
        if (true == regex_match(str, regex("[a-zA-Z0-9]+@1(26|63)\\.com")))
        {
            break;
        }
        cout << "輸入錯誤,請重新輸入:" << endl;
    }
    cout << "輸入成功!" << endl;
 
    return 0;
}

regex_search

搜索匹配,即搜索字符串中存在符合規(guī)則的子字符串。

用法一:匹配單個

#include <iostream>
#include <regex>
#include <string>
using namespace std;
 
int main()
{
    string str = "hello2019-02-03word";
    smatch match;//搜索結(jié)果
    regex pattern("(\\d{4})-(\\d{1,2})-(\\d{1,2})");//搜索規(guī)則  ()表示把內(nèi)容拿出來
    if (regex_search(str, match, pattern))
    {    //提取 年 月 日
        cout << "年:" << match[1] << endl;
        cout << "月:" << match[2] << endl;
        cout << "日:" << match[3] << endl;
        //下標(biāo)從1開始 下標(biāo)0存的是符合這個搜索規(guī)則的起始位置和結(jié)束位置
    }
    return 0;
}

用法二:匹配多個

#include <iostream>
#include <regex>
#include <string>
using namespace std;
 
int main()
{
    //匹配多個符合要求的字符串
    string str = "2019-08-07,2019-08-08,2019-08-09";
    smatch match;
    regex pattern("(\\d{4})-(\\d{1,2})-(\\d{1,2})");
    string::const_iterator citer = str.cbegin();
    while (regex_search(citer, str.cend(), match, pattern))//循環(huán)匹配
    {
        citer = match[0].second;
        for (size_t i = 1; i < match.size(); ++i)
        {
            cout << match[i] << " ";
        }
        cout << endl;
    }
    return 0;
}

regex_replace

替換匹配,即可以將符合匹配規(guī)則的子字符串替換為其他字符串。

將字符串中的-替換為/

#include <iostream>
#include <regex>
using namespace std;
int main()
{
    //替換不會修改原串
    cout << regex_replace("2019-08-07", regex("-"), "/") << endl;
    return 0;
}

匹配以逗號分隔的字符串(\S表示匹配任意顯示字符)

使用正則表達(dá)式將所有信息批處理為sql的語句

使用正則表達(dá)式1999-10-7 修改為 10/7/1999

先匹配上,再拿小括號獲取值 然后替換

然后就可以放在程序中

int main()
{
    string str;
    cin >> str;
    cout << regex_replace(str, regex("(\\d{4})-(\\d{1,2})-(\\d{1,2})"), "$2/$3/$1");
 
    return 0;
}

將字符串中的/刪掉

總結(jié) 

到此這篇關(guān)于C++11正則表達(dá)式(regex_match、regex_search和regex_replace)的文章就介紹到這了,更多相關(guān)C++11正則表達(dá)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++里最容易忽視卻不能忽視的問題(必看)

    C++里最容易忽視卻不能忽視的問題(必看)

    在C++里最容易忽視卻不能忽視的問題都有哪些呢?下面小編就為大家介紹一下。一起跟隨小編過來看看吧
    2016-05-05
  • C++ 11和C++98相比有哪些新特性

    C++ 11和C++98相比有哪些新特性

    C++11標(biāo)準(zhǔn)提供了許多有用的新特性。這篇文章特別針對使C++11和C++98相比看上去像一門新語言的特性
    2017-03-03
  • opengl實現(xiàn)直線掃描算法和區(qū)域填充算法

    opengl實現(xiàn)直線掃描算法和區(qū)域填充算法

    這篇文章主要為大家詳細(xì)介紹了opengl實現(xiàn)直線掃描算法和區(qū)域填充算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++ OpenCV實戰(zhàn)之形狀識別

    C++ OpenCV實戰(zhàn)之形狀識別

    本案例通過使用OpenCV中的approxPolyDP進(jìn)行多邊形近似,進(jìn)而進(jìn)行基礎(chǔ)形狀識別(圓、三角形、矩形、星形…),快跟隨小編一起動手嘗試一下
    2022-07-07
  • C++ 賦值構(gòu)造函數(shù)注意點介紹

    C++ 賦值構(gòu)造函數(shù)注意點介紹

    下面小編就為大家?guī)硪黄狢++ 賦值構(gòu)造函數(shù)注意點介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++11中std::function與std::bind的用法實例

    C++11中std::function與std::bind的用法實例

    大家都知道C++11中增加了許多的新特性,下面這篇文章主要給大家介紹了關(guān)于C++11中std::function與std::bind的用法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 一文詳解Qt如何優(yōu)雅的進(jìn)行界面布局

    一文詳解Qt如何優(yōu)雅的進(jìn)行界面布局

    使? Qt 在界?上創(chuàng)建的控件, 都是通過 “絕對定位” 的?式來設(shè)定的,這種設(shè)定?式其實并不?便,尤其是界?如果內(nèi)容?較多, 不好計算,所以Qt 引??布局管理器 (Layout)?機(jī)制, 來解決上述問題,需要的朋友可以參考下
    2024-05-05
  • C語言中l(wèi)seek()函數(shù)和fseek()函數(shù)的使用詳解

    C語言中l(wèi)seek()函數(shù)和fseek()函數(shù)的使用詳解

    這篇文章主要介紹了C語言中l(wèi)seek()函數(shù)和fseek()函數(shù)的使用詳解,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • C++引用和結(jié)構(gòu)體介紹

    C++引用和結(jié)構(gòu)體介紹

    這篇文章主要介紹了C++引用和結(jié)構(gòu)體,結(jié)構(gòu)體是我們自定義的復(fù)合類型,本質(zhì)上也是一種變量類型,所以一樣可以使用引用,下面來看看文章內(nèi)容詳細(xì)介紹,需要的朋友可以參考一下
    2021-11-11
  • C++?stack用法總結(jié)(示例詳解)

    C++?stack用法總結(jié)(示例詳解)

    std::stack?是?C++?標(biāo)準(zhǔn)模板庫(STL)中的容器適配器,它提供了棧(stack)的功能,基于其他序列容器實現(xiàn),下面給大家介紹std::stack?的用法總結(jié),感興趣的朋友一起看看吧
    2024-01-01

最新評論