贪婪模式与懒惰模式(非贪婪模式)
(一)贪婪模式
以字符串“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>" |