我一直这样写正则表达式
<A HREF="([^"]*)" TARGET="_blank">([^<]*)</A>
但我刚刚了解到这个懒惰的事 http://www.regular-expressions.info/examples.html我可以这样写
<A HREF="(.*?)" TARGET="_blank">(.*?)</A>
使用第二种方法有什么缺点吗?正则表达式肯定更紧凑(即使 SO 解析它更好)。
Edit:这里有两个最佳答案,它们指出了表达式之间的两个重要区别。 ysth 的答案指出了非贪婪/懒惰的弱点,其中超链接本身可能包含 A 标签的其他属性(绝对不好)。罗布·肯尼迪指出了贪婪示例中的一个弱点,即锚文本不能包含其他标签(绝对不行,因为它也不会捕获所有锚文本)......所以答案是,正则表达式就是它们的意思。是的,看似相同的惰性解决方案和非惰性解决方案在语义上可能并不等效。
Edit:第三个最佳答案是 Alan M 提出的关于表达的相对速度。目前,我将把他标记为最佳答案,以便人们给他更多积分:)
另一件需要考虑的事情是目标文本有多长,以及其中有多少内容将与量化子表达式匹配。例如,如果您尝试匹配大型 HTML 文档中的整个 元素,您可能会想使用以下正则表达式:
/<BODY>.*?<\/BODY>/is
但这会做很多不必要的工作,一次匹配一个字符,同时在每个字符之前有效地进行否定前瞻。您知道
在大多数情况下,您不会注意到贪婪量词和不情愿量词之间有任何速度差异,但需要记住这一点。您应该明智地使用不情愿的量词的主要原因是其他人指出的:他们可能不情愿地这样做,但如果这就是实现总体目标所需的,那么它们会比您想要的更多匹配。匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)