懒惰,贪婪还是什么?寻找权威的正则表达式参考

时间:2009-02-19 19:48:19

标签: regex regex-greedy

最近,在网络*的某个地方,我找到了一个正则表达式的参考,它描述了贪婪的“第三条道路”,两者都不同 来自贪婪的(.*)和懒惰的(.*?)匹配。

我现在尝试搜索SO,Google搜索,甚至搜索我的浏览器历史记录,但无济于事。

任何人都可以很好地猜测我看到的是什么吗?


澄清:它提到了对我来说是一个新构造(类似.*+),我相信它甚至有一个名称(类似于,但可能不是,“被动地贪婪”)。 / p>

*我很欣赏“在网络上的某个地方”与“在巴别图书馆”或“在曼德尔布鲁特集合中”一样有用,但请尽量提供帮助

6 个答案:

答案 0 :(得分:5)

我认为你指的是“过度”匹配。 Java在此页面上描述了它:http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

  

贪得无厌的量词   尽可能多地匹配   即使这样做也会退缩   允许整体匹配成功。

语法与您描述的(。* +)相同。

答案 1 :(得分:4)

这可能吗? http://www.regular-expressions.info/repeat.html

An Alternative to Laziness

In this case, there is a better option than making the plus lazy. We can use a greedy plus and a negated character class: <[^>]+>.

答案 2 :(得分:2)

有各种不同的正则表达式包。 PCRE(与Perl兼容的正则表达式)在Perl,Java,PHP和其他语言中使用(或多或少)。 PCRE man page可能被视为最终参考。它描述了占有量词(例如* +和++),它们是原子团的简写。

答案 3 :(得分:1)

嗯,不完全是参考,但仍然很好。 Mastering Regular Expressions

O'Reilly还有一本“参考”书,但我无法就此作证。刚刚第一次看到它。

答案 4 :(得分:0)

我总是在我的立方体中保留这个regular expressions cheat sheet的副本。

答案 5 :(得分:0)

谢谢大家。让记忆恢复的关键是“占有欲”,而不是“被动”。

以下是一些有用的参考资料: