否定前瞻性正则表达式问题

时间:2017-10-22 12:19:33

标签: regex

我开始寻找前瞻并尝试创建一个简单的示例,但由于某些原因,当我尝试使用否定前瞻时,它无法正常工作。

我有以下简单的正则表达式:

href="(.+?)"(?!\s)

和这个字符串:

<a href="test.com">test</a> 
<a href="test.com" title="title">test</a>

测试环境:https://regex101.com/r/JztPUe/1

我正在尝试将href放在href之间,只要它后面没有空格,但它似乎并没有让我失望,因为它获得了第一个和第二个URL。

当我将其更改为正向前瞻时,它应该正常工作,它只需要第二个URL,但负面的URL不能按预期工作。

有人能说出我的错误吗?

2 个答案:

答案 0 :(得分:1)

您应该考虑使用HTML解析器而不是尝试使用正则表达式执行此操作。话虽如此,您可以通过坚持href子句后面的内容不是空格来表达您的正则表达式:

href="([^"]*)"[^ ]

Demo

您当前的正则表达式:

href="(.+?)"(?!\s)

在Regex 101中按预期工作,稍作重写:

href="([^"]*)"(?!\s)

Demo

您遇到的问题似乎是由于您的演示中的正则表达式不支持延迟点(.+?)而引起的。这是Perl扩展,并不是所有引擎都支持。

答案 1 :(得分:1)

空格href="\K(\S+)"\s\K demo

没有空格href="\K(\S+)">\K demo


\K转义字符串序列。