PHP 正则表达式替换所有非图片的 URL

PHP RegEx Replace All URLs That Aren't Images

我目前正在使用此正则表达式来捕获字符串中的所有 URL,该字符串可以是多行并包含任何其他类型的文本,这对于普通 URL 来说非常有效。但我想以不同的方式替换图像 URL,因此我当前的表达式无法匹配这些 URL。

我现在的表情是

(https?:\/\/([-\w\.]+[-\w])+(:\d+)?(\/([\w\/_\.#-]*(\?\S+)?[^\.\s])?)?)

但我不希望它匹配以 (jpe?g|png|gif) 结尾的 URL,而且我一直无法弄清楚如何使用 RegEx 负前瞻。

真的,通过匹配所有 url 然后检查它们来检查 url 会更容易。或者使用 preg_replace_callback,这将允许您检查匹配项上的其他内容并添加额外的逻辑来检查它是什么类型的 url。您只需使用回调切换替换值,回调返回的内容就是被替换的内容。

但是,如果您想使用单个正则表达式,请在模式的开头放置类似这样的内容:(?!\S+(?:png|gif|jpe?g)) 这将强制 url 不匹配,如果它有 .(png|gif|jpe?g) 字符串中的任意位置。