美文网首页
正则表达式笔记(三)

正则表达式笔记(三)

作者: oowl | 来源:发表于2017-05-11 15:20 被阅读0次

    边界

    断言也被称做零宽度断言(zero-widthassertion)。零宽度断言不匹配字符,而是匹配字符串中的位置。其中的一些,比如^和$,也叫做锚位符。断言标记边界,但是并不耗用字符。

    边界的种类:
    行或者字符串的起始与结束位置;
    单词边界(两种);
    主题词的起始与结束位置;
    引用字符串字面值的边界。

    1、行的起始与结束
    ^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。$匹配行或字符串的结尾位置。
    例子1、^How.*Country.$
    它会匹配以单词How开头的整行。请注意结尾的点号之前有一个反斜杠,它对点号进行转义,这样点号就被解释为字面值。如果不对点号转义,它就会匹配任意字符。如果想匹配作为字面值的点号,则必须将点号转义或者将其放入字符组中。

    2、单词边界与非单词边界
    \b 匹配单词边界
    \B 匹配一个非单词边界,
    \Be\B 它匹配了小写字母e,而匹配的字母e的两边都是其他字母或者是非单词字符。零宽度断言不会匹配两边的字符,但它会识别文字e的两边是否是非单词边界。
    3、使用元字符的字面值
    .^$*+?|(){}[]-这15个元字符在正则表达式中有特殊含义,用来编写匹配模式。(连字符在字符组的方括号中用来表示范围。但在其他情况下,则无特殊含义。)。
    \Q$\E它将匹配$,因为\Q和\E之间的任意字符都会被解释为普通字符。也可以在元字符之前加一个\使其匹配字面值。

    量词

    量词的特性:

    • 量词自身是贪心的。贪心的量词会首先匹配整个字符串。尝试匹配时,它会选定尽可能多的内容,也就是整个输入。量词首次尝试匹配整个字符串,如果失败则回退一个字符后再次尝试。这个过程叫做回溯(backtracking)。它会每次回退一个字符,直到找到匹配的内容或者没有字符可尝试为止。此外,它还记录所有的行为,因此相较另两种方式它对资源的消耗最大。它先“吃”尽所有的字符,然后每次“吐”出一点,慢慢咀嚼消化
    • 懒惰(有时也说勉强)的量词则使用另一种策略。它从目标的起始位置开始尝试寻找匹配,每次检查字符串的一个字符,寻找它要匹配的内容。最后,它会尝试匹配整个字符串。要使一个量词成为懒惰的,必须在普通量词后添加一个问号(? )。它每次只“吃”一点。
    • 占有量词会覆盖整个目标然后尝试寻找匹配内容,但它只尝试一次,不会回溯。占有量词就是在普通量词之后添加一个加号(+)。它不“咀嚼”而是直接“吞咽”,然后才想知道“吃”的是什么。下面几节将逐一展示这几种量词。占有量词会覆盖整个目标然后尝试寻找匹配内容,但它只尝试一次,不会回溯。占有量词就是在普通量词之后添加一个加号(+)。它不“咀嚼”而是直接“吞咽”,然后才想知道“吃”的是什么。下面几节将逐一展示这几种量词。
    基本量词:
    • *零次或多次
    • +一次或多次
    • ?零次或一次
      这些量词默认是贪心的,这意味它们在第一次尝试时会尽可能多地匹配字符。

    使用花括号可以限制某个模式在某个范围内匹配的次数,未经修饰的量词就是贪心量词。
    例如:7{1}会匹配第一次出现的7。
    要匹配一个或多个数字7,只要加一个逗号即可:7{1,}
    7+和7{1,}本质上是一样的,
    7*和7{0,}也是相同的。
    另外,7?与7{0,1}也是一样的。
    还可以匹配m到n次,
    比如:7{3,5}会匹配三个、四个以及五个7。
    可以看出,花括号(或者说范围语法)是最灵活和精确的量词。

    • {n}精确匹配n次
    • {n,}匹配n次或更多次
    • {m,n}匹配m至n次
    • {0,1}与?相同(零次或一次)
    • {1,0}与+相同(一次或更多)
      {0,}与*相同(零次或更多)

    懒惰量词

    量词后面跟上? 就变成懒惰量词 例如:5?? ,前边这个?是量词表示0次或1次,后面这个?会把前面那个量词变成懒惰量词,按最少的次数去匹配,也就是0次。例如:5{2,5}? ,{}之中的表示匹配2-5次,后面的?将前面的量词变成懒惰量词只会匹配两次。

    • ??懒惰匹配零次或一次(可选)
    • +?懒惰匹配一次或多次
    • *?懒惰匹配零次或多次
    • {n}?懒惰匹配n次
    • {n,}?懒惰匹配n次或多次
    • {m,n}?懒惰匹配m至n次

    占有量词

    • ?+占有式匹配零次或一次(可选)
    • ++占有式匹配一次或多次
    • *+占有式匹配零次或多次
    • {n}+占有式匹配n次
    • {n,}+占有式匹配
    • n次或更多次{m,n}
    • +占有式匹配m至n次

    相关文章

      网友评论

          本文标题:正则表达式笔记(三)

          本文链接:https://www.haomeiwen.com/subject/srsgtxtx.html