正则表达式匹配URL但不是图像

时间:2013-10-09 15:14:12

标签: regex preg-match

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

我正在使用上面的内容搜索包含文本,图片网址和常规网址的HTML代码。我想修改上面的内容,使它只匹配非图像的字符串。我搜索了这个相当多但是干了。我试图使用“负向前瞻匹配”来忽略以jpg | png | gif结尾的链接,但我没有取得任何成功。

例如:

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

嗯,否定的前瞻似乎不是很健康:)

尝试这样的事情:

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

前瞻的格式为(?! ... ),我在图片扩展名前加[^" ]*,以允许https?//部分与扩展名之间的任意数量的字符。然后,您可以继续将字符串的其余部分与您正在使用的[^" ]匹配。

另外,你应用这个正则表达式:

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

这样你就不会有很多东西用反斜杠逃脱。

regex101 demo