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

2018-02-05  本文已影响0人  Michael_748c

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

(一)贪婪模式

以字符串“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>"
上一篇下一篇

猜你喜欢

热点阅读