【发布时间】:2010-09-26 21:06:40
【问题描述】:
我一直写这样的正则表达式
<A HREF="([^"]*)" TARGET="_blank">([^<]*)</A>
但我刚刚了解到lazy thing,我可以这样写
<A HREF="(.*?)" TARGET="_blank">(.*?)</A>
使用第二种方法有什么缺点吗?正则表达式肯定更紧凑(甚至 SO 也能更好地解析它)。
编辑:这里有两个最佳答案,指出了表达式之间的两个重要区别。 ysth 的回答指出了非贪婪/懒惰的弱点,其中超链接本身可能包含 A 标签的其他属性(绝对不好)。 Rob Kennedy 指出了贪婪示例中的一个弱点,即锚文本不能包含其他标签(绝对不行,因为它也不会抓取所有锚文本)......所以答案是,正则表达式就是他们是,看似相同的惰性和非惰性解决方案在语义上可能并不等效。
编辑:第三个最佳答案是 Alan M 关于表达式的相对速度。暂时,我会将他标记为最佳答案,以便人们给他更多积分:)
【问题讨论】:
-
当然可以,但很明显,一旦这个问题有点老了,就没有人喜欢它了。
-
如果您可以更改接受的答案,请随时这样做。我的回答并没有真正回答问题,只是详细说明了其他答案。
-
我不同意。有三个方面:匹配你不想要的东西,不匹配你想要的东西,以及它将为处理器做多少工作。没有人遇到超过一个问题。
-
哦,我应该提一下,这比我在发布问题之前所知道的多三个方面,所以这是一个很大的帮助,非常感谢你们三个!
标签: regex regex-greedy non-greedy reluctant-quantifiers