为了账号安全,请及时绑定邮箱和手机立即绑定

在正则表达式的上下文中,“懒惰”和“贪婪”是什么意思?

/ 猿问

在正则表达式的上下文中,“懒惰”和“贪婪”是什么意思?

慕运维8079593 2019-05-24 14:59:04

在正则表达式的上下文中,“懒惰”和“贪婪”是什么意思?

有人能以一种可以理解的方式解释这两个术语吗?



查看完整描述

4 回答

?
慕盖茨9453107

贪婪会尽可能多地消耗掉。从http://www.regular-expressions.info/repeat.html我们看到尝试匹配HTML标签的示例<.+>。假设您有以下内容:

<em>Hello World</em>

您可能认为<.+>.意味着任何非换行符并且+意味着一个或多个)只会匹配<em></em>,而实际上它将非常贪婪,并从第一个<到最后一个>。这意味着它将匹配<em>Hello World</em>而不是您想要的。

使它懒惰(<.+?>)将防止这种情况。通过添加?之后+,我们告诉它重复尽可能少的次数,所以>它遇到的第一个,就是我们想要停止匹配的地方。

我鼓励你下载RegExr,这是一个很棒的工具,可以帮助你探索正则表达式 - 我一直都在使用它。


查看完整回答
反对 回复 2019-05-24
?
123456qqq

贪婪'意味着匹配最长的字符串。

'懒惰'意味着匹配最短的字符串。

例如,贪婪的h.+l比赛'hell''hello',但懒惰的h.+?l比赛'hel'


查看完整回答
反对 回复 2019-05-24
?
噜噜哒

+-------------------+-----------------+------------------------------+

| 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  |

+-------------------+-----------------+------------------------------+

加一个?一个量词使它不合适,即懒惰。

实施例:
测试字符串:计算器
贪婪reg表达式s.*o输出:stackoverflo瓦特
懒惰reg表达式s.*?o输出:stacko verflow

查看完整回答
反对 回复 2019-05-24
?
慕仰8121524

贪婪意味着你的表达式将尽可能地匹配一个组,懒惰意味着它将匹配可能的最小组。对于这个字符串:

abcdefghijklmc

这个表达式:

a.*c

贪婪的匹配将匹配整个字符串,而惰性匹配将匹配第一个abc


查看完整回答
反对 回复 2019-05-24

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信