1. 程式人生 > >c++11正則表示式(一)——匹配模式(pattern)

c++11正則表示式(一)——匹配模式(pattern)

一、作用

    pattern 是一個c++字串,它作用是給出一匹配規則,去檢測給定字串是否具備這種拼接規則。

二、模式字串的語法規則

      需要插入一句題外話,在特殊元字元中會用到\,對於c/c++而言它是個特殊字元,若我們需要一個“斜槓"時候需要

   在其前面加一個\,即應該寫為\\。

    1>開始與結尾位置宣告

        1.1 ^表示字串的開始

                如 "^yao",表示以“yao”開始的的字串。

                “yaopanyuan”,“yaois”是符合模式的字串。

        1.2^$表示字串的結尾

            “yao$”表示以“yao”結尾的字串

            “panyuanyao”我的名字英文寫法,匹配成功。

  2>字母,數字等的表示方法

        2.1> . 表示除換行以外的任意字元

        2.2>  \w 表示任意字母、數字、下劃線

          如下邊例子: [line 1] 表示a後邊可以是任意字母、數字、下劃線的字串,[line2] 被測試字串a後邊不是

                                字母、數字、下劃線中一種,因此匹配失敗。

         void metachar() {

std::string strPattern("a\\w");  // [line 1]
std::regex r(strPattern);
std::smatch result;

std::string str_test = "a*******";  //  [line 2]

if (std::regex_search(str_test, result, r)) {

std::cout << result.str() << std::endl;
} else {

std::cout << "smatch failed !" << std::endl;

        }

      }

    2.3> \s:表示任意空白符(tab 包含在內)

    2.4> \d :表示單個數字 

    2.5> [[:alpha:]]:表示任何字母

    2.6> [[:alnum:]] : 表示任何字母和數字 

3>次數限制

   3.1>  {n} : "ab{9}",匹配某字串中符合a後邊9個b的子字串

   3.2> {n,}: "ak{8,}",匹配某字串中符合a後邊至少8個k的子字串

   3.3> {n,m}: "ak{6, 9}", ……a後k次數為6~9 【注】不要在{}中出現空格否則會使程式崩潰
   3.4>  * :  如  "aA*"         表示一個字串有一個a後邊跟0個或多個A
   3.5>  ? : 如   "aA?"         表示?之前的字元(A)在a後邊且至多一個可以沒有
   3.6> + : 如  "bbbbA+"  表示一個字串必須符合bbbb後邊緊接至少有一個A或多個A

4>集合及補集

    4.1> []:       使用{}表示重複次數(下邊介紹),[]用於表示一個字元集合。可以使用-來表示一個範圍([0-9]表示0~9十個數構                       成的一個集合)

    4.2> 補集:  []中使用^來表示集合的補集如[^7-9]表示除7.8.9以外數字(0 1 2 3 4 5 6)。

5>分組 ()

    作用就是組織一個單元,以便可以迴圈,或選擇(如:(cpp|cc))。使用()來進行分組,()中|表示或

6>懶惰匹配

     【1】*?     表示:重複任意此,但儘可能少
     【2】+?     重複一次或更多次,但儘可能少
     【3】??     重複0次或1次,但儘可能少
     【4】{n,}?  重複一次或更多次,但儘可能少

     【5】{n,m}? 重複n到m次,但儘可能少

三、結束語

    到此正則表示式模式已經敘述完了,以後的篇章將以程式碼形式介紹c++11正則表示式庫。