贪婪就会尽可能多地消耗。 在http://www.regular-expressions.info/repeat.HTML中,我们看到了尝试将HTML标记与<.+>
匹配的示例。 假设您有以下内容:
<em>Hello World</em>
您可能认为<.+>
(.
表示任何非换行字符,+
表示一个或多个)只会匹配和
,而实际上它会非常贪婪,从第一个
到最后一个
。 这意味着它将匹配
Hello World
,而不是您想要的内容。
使它变得懒惰(<.+?>
)可以防止这种情况。 通过在+
后面添加?
,我们告诉它要尽可能少地重复,因此它遇到的第一个>
就是我们希望停止匹配的地方。
我鼓励您下载RegExr,这是一个很棒的工具,可以帮助您探索正则表达式--我一直在使用它。
“贪婪”意味着匹配最长可能字符串。
'lazy'表示匹配尽可能短字符串。
例如,贪婪的h.+l
匹配'hello'
中的'hell'
,而懒惰的h.+l
匹配'hel'
。
+-------------------+-----------------+------------------------------+
| Greedy quantifier | Lazy quantifier | Description |
+-------------------+-----------------+------------------------------+
| * | *? | Star Quantifier: 0 or more |
| + | +? | Plus Quantifier: 1 or more |
| ? | ?? | Optional Quantifier: 0 or 1 |
| {n} | {n}? | Quantifier: exactly n |
| {n,} | {n,}? | Quantifier: n or more |
| {n,m} | {n,m}? | Quantifier: between n and m |
+-------------------+-----------------+------------------------------+
加一个? 到一个量词,使它不贪婪,即懒惰。
示例:
测试字符串:stackoverflow
贪婪reg表达式:S.*o
输出:stackoverflow
惰性reg表达式:S.*?o
输出:stackoverflow