+-------------------+-----------------+------------------------------+
| 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 |
+-------------------+-----------------+------------------------------+
Add a ? to a quantifier to make it ungreedy i.e lazy.
贪婪的人会尽可能多地消费。从http://www.regular-expressions.info/repeat.html我们可以看到尝试将HTML标记与
<.+>
匹配的示例。假设您有以下内容:你可能认为
<.+>
(.
表示任何非换行字符,而+
表示一个或多个)将只匹配<em>
和</em>
,而实际上它将非常贪婪,从第一个<
到最后一个>
。这意味着它将匹配<em>Hello World</em>
,而不是您想要的。使其变懒(
<.+?>
)将防止这种情况。通过在+
之后添加?
,我们告诉它尽可能地重复^{几次,所以它遇到的第一个>
就是我们想要停止匹配的地方。我鼓励您下载RegExr,这是一个很好的工具,可以帮助您探索正则表达式-我一直在使用它。
示例:} 输出:stackoverflow} 输出:stackoverflow
测试字符串:stackoverflow
贪婪注册表表达式:^{
lazy reg表达式:^{
“贪心”意味着匹配最长的字符串。
“Lazy”表示匹配尽可能短的字符串。
例如,贪婪的
h.+l
匹配'hello'
中的'hell'
,而懒惰的h.+?l
匹配'hel'
。相关问题 更多 >
编程相关推荐