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

亡梦爱人 提交于 2020-02-27 23:44:15

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


#1楼

贪婪意味着您的表情将匹配尽可能大的组,懒惰意味着它将匹配最小的组。 对于此字符串:

abcdefghijklmc

这个表达式:

a.*c

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


#2楼

“ Greedy”表示匹配最长的字符串。

“惰性”表示匹配最短的字符串。

例如,贪婪h.+l'hell' 'hello'中的'hell'匹配,而懒惰h.+?l'hel'匹配。


#3楼

正则表达式

正则表达式中的标准量词是贪婪的,这意味着它们尽可能地匹配,仅根据需要返回以匹配正则表达式的其余部分。

通过使用惰性量词,表达式首先尝试最小匹配。


#4楼

贪婪会消耗尽可能多的东西。 从http://www.regular-expressions.info/repeat.html中,我们看到了尝试将HTML标签与<.+>匹配的示例。 假设您具有以下条件:

<em>Hello World</em>

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

使其变得懒惰( <.+?> )可以防止这种情况。 通过添加?+ ,我们告诉它重复尽可能少的次数 ,因此遇到的第一个>是我们要停止匹配的位置。

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


#5楼

取自www.regular-expressions.info

贪婪 :贪婪的量词首先尝试尽可能多地重复标记,然后逐渐放弃匹配,因为引擎回溯以找到整体匹配。

懒惰 :懒惰的量词首先根据需要重复标记几次,然后随着引擎通过正则表达式回溯以找到整体匹配项而逐渐扩展匹配项。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!