第五章:重复匹配

Posted changlezhong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五章:重复匹配相关的知识,希望对你有一定的参考价值。

5.1 有多少个匹配:

  5.5.1 匹配一个或多个字符:

    想要匹配同一个字符(或字符集合)的多次重复,只要简单的给这个字符(或字符集合)加上一个+字符作为后缀即可。 

    + : 表示匹配一个或多个字符,比如[0-9]表示匹配任意单个数字,[0-9]+将匹配一个或多个连续的数字

   注意:

     在给字符集合加上+后缀的时候,必须把+放在字符集合的外边,比如说[0-9]+是正确的匹配一个或多个连续的数字,而[0-9+]只是匹配一个单个的数字或加号

   文本:

    Send personal email to [email protected] For qwestions about a book user [email protected] Feel free to send unsolicited email to [email protected] (wouldn‘t it be nice if it were that simple, huh?)

   正则表达式:

    \[email protected]\w+\.\w+   

   结果:

    Send personal email to [email protected]. For qwestions about a book user [email protected]. Feel free to send unsolicited email to [email protected] (wouldn‘t it be nice if it were that simple, huh?)

注意:

  +是一个元字符,要相匹配+本身,就必须使用它的转义序列 \+

再看一个例子:

  文本:

    Send personal email to [email protected] or [email protected] For qwestions about a book user [email protected] Feel free to send unsolicited email to [email protected] (wouldn‘t it be nice if it were that simple, huh?)

  正则表达式:

    \[email protected]\w+\.\w+

  结果:

    Send personal email to [email protected] or ben.[email protected]. For qwestions about a book user [email protected]. Feel free to send unsolicited email to [email protected] (wouldn‘t it be nice if it were that simple, huh?)

  分析:

    [email protected]未正确匹配

  调整后的正则表达式:

    [\w.][email protected][\w.]\.\w+

注意:

  当在字符集合([])里使用的时候,像.和+这样的元字符将被解释成普通字符,不需要转义,但转义也没有关系。[\w.] 和 [\w\.]是等价的

5.1.2 匹配零个或多个字符:

  +匹配一个或多个字符,但不匹配零个字符,+最少也要匹配一个字符,那要想匹配一个可有可无的字符,该使用*元字符来完成

  文本:

    Hello [email protected] is my email address.

  正则表达式:

    [\w.][email protected][\w.]\.\w+

  结果:

    Hello [email protected] is my email address.

  正确的正则表达式:

    [\w.]*@[\w.]\.\w+

  结果:

    Hello .[email protected] is my email address.

注意:

  *是一个元字符,要想匹配*本身需要对其进行转义

5.1.3 匹配零个或一个字符:

  ?只能匹配一个字符(或字符集合)的零次或一次出现

  文本:

    The URL is http://www.forta.com, to connect securely user https://www.forta.com/ instead.

  正则表达式:

    http://[\w./]+

  结果:

    The URL is http://www.forta.com, to connect securely user https://www.forta.com/ instead.

在http后加一个s*并不能解决问题,因为httpssss://这种事非法的url

  正确的正则表达式:

    https?://[\w./]+

  结果:

    The URL is http://www.forta.com, to connect securely user https://www.forta.com/ instead.

注意:

  ?是一个元字符,要想匹配*本身需要对其进行转义

拓展:

  之前说过在Windows系统下匹配空行为 \r\n\r\n,在linux系统下匹配空行为 \n\n,那想写出在Windows和linux系统下通用的空行匹配正则表达式该怎么写呢:

  [\r]?\n[\r]?\n

5.2 匹配的重复次数:

  我们学过+,*和?,但这并不能对重复性匹配有一个精确的控制,所以在正则表达式中提供了一个用来设定重复次数的语法,重复次数要用 { 和 } 字符来给出,把重复的次数卸载它们之间即可

注意:

  { 和 }是元字符,要想匹配他们本身需要对他们进行转义

5.2.1 为重复匹配设定一个精确的值:

    文本:

      #123456 #12345 #1234567

    正则表达式:

      #\d{6}

    结果:

      #123456 #12345 #1234567

5.2.2 为重复匹配次数设定一个区间:

    {}语法还可以为重复次数设定一个区间,也就是设定一个重复匹配的最小值和最大值,{2,4}表示最少重复2次,最多重复4次

    文本:

      4/8/03

      10.6.2004

      2/2/2

      01-01-01

    正则表达式:

      \d{1,2}[-\/\]\d{1,2}[-\/]\d{2,4}

    结果:  

      4/8/03

      10.6.2004

      2/2/2

      01-01-01

注意:

  在上面的例子中,匹配 / 的时候我们使用了转义序列 \/

5.2.3 匹配“至少重复多少次”

  使用 {3,} 来表示至少重复3次或更多次

  文本:

    1001:$496.80

    1002:$1290.69

    1003:$26.43

    1004:$613.42

    1005:$7.61

    1006:$414.90

    1007:$25.00

  正则表达式:

    \d+:\$\d{3,}\.\d{2}

  结果:  

    1001:$496.80

    1002:$1290.69

    1003:$26.43

    1004:$613.42

    1005:$7.61

    1006:$414.90

    1007:$25.00

5.3 防止过度匹配:

  文本:

    <B>AK</B> and <B>HI</B>

  正则表达式:

    <Bb>.*</Bb>

  结果:

    <B>AK</B> and <B>HI</B>

  分析:

    +和*属于“贪婪型”元字符,他们在匹配的时候是多多益善而不是适可而止,当你不需要这种“贪婪行为”时,你就需要使用这些元字符的“懒惰型”版本,即在贪婪型元字符后面加一个?即可。

  懒惰型正则表达式:

    <Bb>.*?</Bb>

  结果:

    <B>AK</B> and <B>HI</B>

以上是关于第五章:重复匹配的主要内容,如果未能解决你的问题,请参考以下文章

第五章 Python 函数

第五章 ORM

第五章 ORM

第五章 Python函数

SpringCloud(Hoxton.SR3)基础篇:第五章Hystrix-request collapsing(请求合并)

第五章 MVC之Bundle详解