匹配所有url,不包括jpg,gif,png

我想匹配所有url但排除与该正则表达式匹配的图像url:jpe?g | gif | png。

(?:HTTPS | FTP |文件):\ b // [?-A-Z0-9 + @#/%=〜_ | $!。;] * A-Z0-9 + @# /%=〜_ | $

问题是带有排除的部分不是这样的:(?!jpe?g | gif | png)

有人有解决方案吗?

例:

不是马辰:

http://example.com/example.jpg http://example.com/example231/example.gif 

比赛:

 http://example.com/example.html http://example.com/example/?id=4331 http://example.com/example/example/ex_ample/ex-ample/?id=4331 

(?!.*(?:\.jpe?g|\.gif|\.png)$)开始你的正则表达式,

所以如果你当前的正则表达式是\b(?:https?|ftp|file)://... ,那么将它合并到

(?!.*(?:\.jpe?g|\.gif|\.png)$)\b(?:https?|ftp|file)://...

另请阅读PHP URLvalidation

我正在解决这个问题,因为最近一个重复的问题已经关闭,所以我将在这里发布:

((?!.*(png|jpg|gif)(?!.))(?:https?|file|ftp):\/\/.*.\.(?:com|ca|net|museum|org|co\.uk))

如果合适,可以随意添加更多protocals,如果合适,可以添加更多图片扩展,如果合适,还可以添加更多顶级域名。

在regex101上测试过