1
/https?\:\/\/[^\" ]+/

我正在使用上面的内容来搜索包含文本、图像 url 和常规 url 的 HTML 代码。我想修改上面的内容,使其只匹配不是图像的字符串。我已经搜索了很多,但没有找到。我试图使用“负前瞻匹配”来忽略以 jpg|png|gif 结尾的链接,但我没有成功。

例如:

http://www.google.com <- valid match

www.example.com/image.jpg <-should not match

有任何想法吗?

4

1 回答 1

4

好吧,消极的前瞻似乎不是很健康:)

尝试这样的事情:

https?://(?![^" ]*(?:jpg|png|gif))[^" ]+
         ^-----------------------^

前瞻具有格式(?! ... ),我已将图像扩展名放在[^" ]*图像扩展名之前,以允许https?//部件与扩展名之间存在任意数量的字符。然后,您可以继续将字符串的其余部分与[^" ]您已经在使用的字符串进行匹配。

此外,您可以像这样应用此正则表达式:

preg_match('~https?://(?![^" ]*(?:jpg|png|gif))[^" ]+~', $text, $match);

这样你就没有太多可以用反斜杠逃脱了。

正则表达式 101 演示

于 2013-10-09T15:32:23.953 回答