zoukankan      html  css  js  c++  java
  • 第五章:重复匹配

    5.1 有多少个匹配:

      5.5.1 匹配一个或多个字符:

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

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

       注意:

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

       文本:

        Send personal email to ben@forta.com. For qwestions about a book user support@forta.com. Feel free to send unsolicited email to spam@forta.com (wouldn't it be nice if it were that simple, huh?)

       正则表达式:

        w+@w+.w+   

       结果:

        Send personal email to ben@forta.com. For qwestions about a book user support@forta.com. Feel free to send unsolicited email to spam@forta.com (wouldn't it be nice if it were that simple, huh?)

    注意:

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

    再看一个例子:

      文本:

        Send personal email to ben@forta.com or ben.forta@forta.com. For qwestions about a book user support@forta.com. Feel free to send unsolicited email to spam@forta.com (wouldn't it be nice if it were that simple, huh?)

      正则表达式:

        w+@w+.w+

      结果:

        Send personal email to ben@forta.com or ben.forta@forta.com. For qwestions about a book user support@forta.com. Feel free to send unsolicited email to spam@forta.com (wouldn't it be nice if it were that simple, huh?)

      分析:

        ben.forta@forta.com未正确匹配

      调整后的正则表达式:

        [w.]+@[w.].w+

    注意:

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

    5.1.2 匹配零个或多个字符:

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

      文本:

        Hello .ben@forta.com is my email address.

      正则表达式:

        [w.]+@[w.].w+

      结果:

        Hello .ben@forta.com is my email address.

      正确的正则表达式:

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

      结果:

        Hello .ben@forta.com 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系统下匹配空行为 ,在linux系统下匹配空行为 ,那想写出在Windows和linux系统下通用的空行匹配正则表达式该怎么写呢:

      [ ]? [ ]?

    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>

  • 相关阅读:
    面试官:软件测试没搞懂这些,哪里来的自信投简历? 刁钻问得高频的面试题(含答案)
    软件测试行业的职业素养?——《高级软件测试-高级软件测试分析师》第一章
    什么?你正在学web自动化测试?那这些Selenium的基本操作你了解过吗?
    没想到 Google 排名第一的编程语言,为什么会这么火?
    为什么大家都在用Fiddler?
    看了很多文章,就这篇说明白了什么是接口测试(含视频教程)
    Win 10 安裝 Docker 及相關設置
    Dynamics CRM
    Dynamics CRM
    Dynamics CRM
  • 原文地址:https://www.cnblogs.com/changlezhong/p/9095050.html
Copyright © 2011-2022 走看看