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正则表达式库。


你可能感兴趣的:(boost,库与stl,c++11,regex,smatch,regular,expression)