【发布时间】:2018-04-03 02:15:11
【问题描述】:
我开始寻找前瞻并尝试创建一个简单的示例,但由于某种原因,当我尝试使用负前瞻时它无法正常工作。
我有以下简单的正则表达式:
href="(.+?)"(?!\s)
还有这个字符串:
<a href="test.com">test</a>
<a href="test.com" title="title">test</a>
测试环境:https://regex101.com/r/JztPUe/1
我只是在没有空格的情况下才尝试在 href 之间获取 URL,但它似乎并没有理解我,因为它正在获取第一个和第二个 URL。
当我将其更改为正向预测时,它会正常工作,并且只需要第二个 URL,但负向预测没有按预期工作。
谁能指出我的错误在哪里?
【问题讨论】:
-
这是一个很好的例子,说明了为什么正则表达式根本不适合任何类型的解析。
-
即使
.+?是惰性的,它仍然会扩展直到找到匹配项。您可以将"(.+?)"转换为原子组(?>"(.+?)")或使用否定字符类[^"]+来避免空间扩展。但基本上你不应该用正则表达式解析 HTML,除非你有一段非常明确的 html。 -
@Siguza 感谢您的评论。我不会将它用于任何解析(至少现在)。我只是想了解前瞻是如何工作的,但是由于我的示例无法正常工作,因此我目前的理解似乎是错误的。
-
我同意@Siguza。举个例子:regex101.com/r/JztPUe/4
-
@Sebastian Proske 和 @hek2mgl 感谢 cmets。我将避免经常使用
.+,并更具体地针对它。至于我使用的字符串,这是我在考虑添加示例字符串时首先想到的,没有具体原因是它是 HTML。 :)
标签: regex