• 正则表达式详解<一>


    正则表达式是一种处理字符串的微型语言;有以下的基本术语:

    l  模式(pattern):正则表达式实际上是通过字符串表达的一个模式

    l  匹配(match): 判断正则表达式和给出的序列[first , last),是否全部匹配

    l  搜索(search):判断在给定的序列里是否存在和正则表达式匹配的子字符串

    l  替换(replace):将匹配到的子字符串替换成其他的字符串

    在C++里边默认的语法是ECMAScript,这是最强大的正则表达式的语法;

    1.  ECMAScript语法

    1.   锚点(anchor)

    特殊字符^和$是锚点,分别匹配到字符串的开头和结尾。例如:^text$,表达的意思就是只匹配text字符串

         2.通配符(wildcard)

         可以用来匹配除了换行符以外的任何字符,例如:正则表达式是:a.b,可以匹配到abc,adb,

    但是不可是:acdb

    3.替换

    A|B 可以匹配到A或则是B

    4.分组(捕获组)

    例如:(.)(ab|cd)(.)其中有三个标记的子表达式,例如输入1ab5则可以捕获到,1 。 ab。5这仨个捕获组。

         5.重复

         * 表示匹配零次或则多次之前的部分。例如:a*b 可以匹配到b , ab , aab , aaab

         + 表示匹配一次以及一次以上之前的部分,例如:a+b可以匹配到ab , aab但是不能是b

         ? 表示匹配到零次或是一次以前的部分,例如: a ? b 可以匹配到ab , b 但是不能位 aab

         {…}表示区间重复,a{n}表示匹配到的a刚好位n个,a{n,}表示匹配到的a为n位或则n位以上;a{n,m}表示匹配到的a的个数位>=n和<=m个;

         6.贪婪匹配和非贪婪匹配

         输入字符串位: aaabbb

         贪婪匹配:正则表达式:(a+)(ab)*(b+) ,匹配到:”aaa””””bbb”

         非贪婪匹配:正则表达式:(a+?)(ab)*(b+)匹配到:“aa“”ab””bb”;

         7.优先级

         第一:元素本身

         第二:量词:+,* , ? {…}

         第三:串联:例如ab+c在量词之后绑定

         第四:替代符| ,最后绑定

         例如:正则表达式:ab+c|d,会匹配到abc, abbc , d , 如果添加括号,ab+(c|d)则匹配到

         , abc , abbc , abd abbd

         8,字符集合匹配

         [a-z]表示可以匹配到a到z之间的任意一个字符,(注意是任意一个,而不是多个)

         [a-zA-Z]表示可以匹配到a到z以及A到Z之间对的任意一个字符;

         另一种方法是使用某种字符类,表示方法[:name:]例如:

         [[:digit:]]表示可以匹配到0~9之间的任意一个数字;

         这里的name可以是以下:

        

    Name

    Expression

    digit

    数字

    d

    和digit一样

    xdigit

    数字和表示16进制的abcdef或则ABCDEF

    alpha

    字母字符所有的大小写

    alnum

    Alpha和digit的组合

    w

    和alnum一样

    lower

    小写字母

    upper

    大写字母

    blank

    一行文本中分割单词的空格符

    punct

    标点符号字符,包括不是alnum意外的所有图形字符

    应用:

    问题:表示0~9的任意一个以及多个数字的匹配

    解答:(1)[0-9]+

              (2)  [[:digit:]]+

              (3)  [[:d:]]+

              (4)  d+

    问题:匹配除了小写字母以外的任意字符

    解答:(1) [[:upper:]]

             (2) [^[:lower:]]

         9.后向引用

           n是>0的整数,表示第n个捕捉组,例如:

         正则表达式:([:d:]*)-.*-1

         可以匹配到:123-abc-123 , 789-kdf-789 , 9-m-9

         但是不可是:123-abc-1234,必须是123,和第一个捕获组一样的内容;

         10.C++里的转义   

         转移d,在C++里应该将其转移,因为是特殊字符在C++里,所以需要转移,转义位:

         \d.

         转移\,这个更加麻烦。应该转译为:\\

         例如:
         正则表达式:( |\n|\r|\\)

         搜索空格 , 换行符 , 回车符 , 反斜杠;

  • 相关阅读:
    php 数组
    条件语句if else ,switch ,while ,do.while
    if..else 判断中的 Boolean()转换
    wampserver 集成环境
    sublime text 安装及使用
    vue tab切换
    SVG 基础
    gitosis管理员的密钥丢失解决办法
    源码安装MySQL
    Xshell远程登录
  • 原文地址:https://www.cnblogs.com/boost/p/10425492.html
Copyright © 2020-2023  润新知