美文网首页
02-贪婪模式与懒惰模式(非贪婪模式)

02-贪婪模式与懒惰模式(非贪婪模式)

作者: Michael_748c | 来源:发表于2018-02-05 11:05 被阅读0次

    贪婪模式与懒惰模式(非贪婪模式)

    (一)贪婪模式

    以字符串“daaadcccd”为源字符串作为栗子。

    正则 匹配结果
    (d)(\w+) “daaadcccd”;其中"\w+" 匹配第一个 "d" 之后的所有字符 "xxxdxxxd";
    (d)(\w+)(d) “daaadcccd”;其中"\w+" 匹配第一个 "d" 和最后一个 "d" 之间的所有字符 "xxxdxxx"。

    同理,除了"+"之外,带 "*" 和 "{m,n}" 的表达式都是尽可能地多匹配,这种匹配原则就叫作 "贪婪" 模式 。

    (二)懒惰模式(非贪婪模式)

    在修饰匹配次数的特殊符号(+、*、{m,n})后再加上一个 "?" 号,就由贪婪模式变成懒惰模式。
    以字符串“daaadcccd”为源字符串作为栗子。

    正则 匹配结果
    (d)(\w+?) “da”;其中"\w+" 匹配第一个 "d" 之后的字符“a”
    (d)(\w+?)(d) “daaad”;其中"\w+" 匹配"aaa"

    (三)区别

    举例来讲就可以明白,对于“daaadcccd”字符串“daaad”和“daaadcccd”都符合(d)(\w+)(d)正则,取最长的那个“daaadcccd”。而(d)(\w+?)(d)正则则取最短的那个“daaad”。

    (d)(\w+)(d)(\w+?) 也是同理。

    (四)其他栗子

    以字符串“<td><p>aa</p></td> <td><p>bb</p></td>”为源字符串作为栗子。

    正则 匹配结果
    <td>(.*)</td> 匹配“<td><p>aa</p></td> <td><p>bb</p></td>”整个字符串
    <td>(.*?)</td> 第一次匹配“<td><p>aa</p></td>“字符串;再次匹配下一个时匹配到”<td><p>bb</p></td>"

    相关文章

      网友评论

          本文标题:02-贪婪模式与懒惰模式(非贪婪模式)

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