貪婪模式與懶惰模式(非貪婪模式)
(一)貪婪模式
以字符串“daaadcccd”為源字符串作為栗子。
| 正則 | 匹配結(jié)果 |
|---|---|
| (d)(\w+) | “daaadcccd”;其中"\w+" 匹配第一個(gè) "d" 之后的所有字符 "xxxdxxxd"; |
| (d)(\w+)(d) | “daaadcccd”;其中"\w+" 匹配第一個(gè) "d" 和最后一個(gè) "d" 之間的所有字符 "xxxdxxx"。 |
同理,除了"+"之外,帶 "*" 和 "{m,n}" 的表達(dá)式都是盡可能地多匹配,這種匹配原則就叫作 "貪婪" 模式 。
(二)懶惰模式(非貪婪模式)
在修飾匹配次數(shù)的特殊符號(hào)(+、*、{m,n})后再加上一個(gè) "?" 號(hào),就由貪婪模式變成懶惰模式。
以字符串“daaadcccd”為源字符串作為栗子。
| 正則 | 匹配結(jié)果 |
|---|---|
| (d)(\w+?) | “da”;其中"\w+" 匹配第一個(gè) "d" 之后的字符“a” |
| (d)(\w+?)(d) | “daaad”;其中"\w+" 匹配"aaa" |
(三)區(qū)別
舉例來講就可以明白,對(duì)于“daaadcccd”字符串“daaad”和“daaadcccd”都符合(d)(\w+)(d)正則,取最長(zhǎng)的那個(gè)“daaadcccd”。而(d)(\w+?)(d)正則則取最短的那個(gè)“daaad”。
(d)(\w+) 和 (d)(\w+?) 也是同理。
(四)其他栗子
以字符串“<td><p>aa</p></td> <td><p>bb</p></td>”為源字符串作為栗子。
| 正則 | 匹配結(jié)果 |
|---|---|
| <td>(.*)</td> | 匹配“<td><p>aa</p></td> <td><p>bb</p></td>”整個(gè)字符串 |
| <td>(.*?)</td> | 第一次匹配“<td><p>aa</p></td>“字符串;再次匹配下一個(gè)時(shí)匹配到”<td><p>bb</p></td>" |