日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++正则表达式

發(fā)布時(shí)間:2023/12/20 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++正则表达式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C++正則表達(dá)式

  • 表達(dá)式:

    • 一般字符:可匹配目標(biāo)序列中相同的字符
    • 通配符 . :可匹配目標(biāo)序列中除了換行符外的任何字符
    • [expr]形式表達(dá)式: 可以匹配目標(biāo)序列中包含在表達(dá)式expr定義集內(nèi)的字符或者排序規(guī)則表達(dá)式,采用 [^**expr],**可匹配目標(biāo)序列中未包含在表達(dá)式expr定義集中的字符或排序規(guī)則。
      • 單個(gè)字符 : 如 [A] 匹配 A。

      • ch1 - ch2形式的字符域: 如 [A-F]匹配大寫A到F中的任何一字母。

      • **[:name:]形式字符類: [[ :alpha:]]**匹配一個(gè)字母(不區(qū)分大小寫)。

        字符類名說明
        alnum字母(不區(qū)分大小寫)和數(shù)字
        alpha字母(不區(qū)分大小寫)
        blank空格或制表符
        cntrl文件格式轉(zhuǎn)義字符
        digit數(shù)字
        graph字母(不區(qū)分大小寫) 、數(shù)字、英文標(biāo)點(diǎn)
        lower小寫字母
        upper大寫字母
        print字母(不區(qū)分大小寫)、數(shù)字、英文標(biāo)點(diǎn)和空格
        punct英文標(biāo)點(diǎn)
        space空格
        xdigit表示十六進(jìn)制字符(abcdefABCDEF)
        d與digit相同
        s與space相同
        w與alnum相同
    • 定位點(diǎn):定位點(diǎn)**^匹配目標(biāo)序列的開頭,$**可匹配目標(biāo)序列的末尾。定點(diǎn)可匹配目標(biāo)字符串的位置,而不匹配字符。
    • 轉(zhuǎn)義序列:
      • 文件格式轉(zhuǎn)移:
        • \、\f、\n、\r、\t 和 \v 分別表示匹配目標(biāo)序列中的反斜杠、換頁符、回車符、水平制表符和垂直制表符

        • DSW字符轉(zhuǎn)義:

          轉(zhuǎn)義序列等效命名類默認(rèn)命名類
          \d[ [:d:] ][[:digit:]]
          \D[^[: D : ]][^[: digit :]]
          \s[[: s :]][[: space :]]
          \S[^[: S :]][^[: space :]]
          \w[[: w :]][a-zA-Z0-9]
          \W[^[: W :]][^a-zA-Z0-9 ]
        • 8進(jìn)制數(shù)轉(zhuǎn)義: \ooo, ‘ooo’表示三位八進(jìn)制數(shù)目,如\101匹配字符A

        • 16進(jìn)制轉(zhuǎn)義: \xhh , “hh”表示兩位十六進(jìn)制, 如\x41 匹配字符A

        • Unicode轉(zhuǎn)義: \uhhhh, “hhhh”表示思維十六進(jìn)制數(shù),如\u0041匹配字符A

  • 量詞:

    • 指定要匹配的表達(dá)式出現(xiàn)的次數(shù),如:x{1,1}表示必須匹配一個(gè)x,x{1,3}可以匹配1-3個(gè)x。
    量詞含義
    E?匹配0次或者1次E(表達(dá)式),等價(jià)于E{0,1}
    E+至少匹配一次E,等價(jià)于E{1,}
    E*匹配0次或者多次E,等價(jià)于E{0,}
    E{n}匹配n次E,等價(jià)于E{n,n}
    E{n, }至少匹配n次E
    E{, n}至多匹配n次E
    E{n,m}至少匹配n次。至多匹配m次

    例如:[A-C]+ 可以匹配“AAA”, “C”

  • 斷言

    斷言含義
    \b一個(gè)單詞的邊界
    \B一個(gè)非單詞的邊界
    (?=E)表達(dá)式后面緊跟著E才匹配成功,但不會(huì)改名目標(biāo)序列中匹配的位置
    (?!E)表達(dá)式后面緊跟著E才匹配成功,但不會(huì)改名目標(biāo)序列中匹配的位置
    (?:E)

    例如:\bmail\b 匹配就是一個(gè)單詞mail,This is a T(?!est):如果T后面沒有est就匹配,主要用于替換, This is a T(?=est) 表示如果T 后面有est 就匹配,這主要用于替換

  • 實(shí)例

    在C++中正則表達(dá)式需要用到regex庫:常用函數(shù):

    函數(shù)名稱解釋
    regex_match將一個(gè)字符序列與正則表達(dá)式進(jìn)行匹配
    regex_search查找字符序列中與正則表達(dá)式匹配的結(jié)果,找到第一個(gè)之后就會(huì)返回結(jié)果并停止查找
    regex_replace替換字符到正則表達(dá)式匹配到字符序列的位置。
  • 檢驗(yàn)郵箱格式:

    郵箱的一般格式:xxx@xxx.com,驗(yàn)證 xxx@163.com 格式的郵箱。

    正則表達(dá)式:[[:graph:]]+@163[.]com,這里將.用方括號括起來是因?yàn)?在正在表達(dá)式中是一個(gè)通配符。

    #include <iostream> #include <regex>using namespace std;int main() {string re = "[[:graph:]]+@163[.]com";regex rule(re);string str = "acvds.cpp@163.com";cout << regex_match(str, rule) << endl; //1cout << regex_replace(str, rule,"ok") << endl; //okreturn 0; } #include <regex> #include <iostream> using namespace std;int main() {string re = "E(?!xpression)[a-z]{0,}";regex rule(re);string str = "Regular E E E";cout << regex_replace(str, rule, "Expression") << endl; //Regular Expression Expression Expressionsystem("pause");return 0; } #include <iostream> #include <regex> using namespace std; int main() {string str = "Hello 2019, Bye 2018";smatch result;regex pattern("\\d{4}"); //匹配四個(gè)數(shù)字//迭代器聲明string::const_iterator iterStart = str.begin();string::const_iterator iterEnd = str.end();string temp;while (regex_search(iterStart, iterEnd, result, pattern)){temp = result[0];cout << temp << " ";iterStart = result[0].second; //更新搜索起始位置,搜索剩下的字符串}cout << endl;return 0; }

總結(jié)

以上是生活随笔為你收集整理的C++正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。