PHP正则表达式替换所有非';t图像

PHP正则表达式替换所有非';t图像,php,regex,url,preg-replace,Php,Regex,Url,Preg Replace,我目前正在使用这个正则表达式捕获一个字符串中的所有URL,它可以是多行并包含任何其他类型的文本,这对于普通URL来说非常有效。但我想用另一种方式替换图像URL,因此我当前的表达式无法匹配这些URL 我现在的表达是 (https?:\/\/([-\w\.]+[-\w])+(:\d+)?(\/([\w\/_\.#-]*(\?\S+)?[^\.\s])?)?) 但是我不想让它匹配以(jpe?g | png | gif)结尾的URL,而且我还没有弄清楚如何使用RegEx负lookaheads。真的,通

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

我现在的表达是

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

但是我不想让它匹配以(jpe?g | png | gif)结尾的URL,而且我还没有弄清楚如何使用RegEx负lookaheads。

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


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

真的,之后只需匹配所有url,然后检查url就更容易了。或者使用preg_replace_回调,这将允许您检查匹配的其他内容,并添加其他逻辑来检查url的类型。但是,如果您想使用单个正则表达式,请在模式的开头放上类似的内容:
(?!\S+(?:png | gif | jpe?g))
,这将强制url在字符串中的任何位置都不匹配
(png | gif | jpe?g)
。是的,我做到了。我就快到了,但我没有试过那根弦的开头,但效果很好。我可能需要研究一下你提到的另一个函数,因为我不知道有这样一个函数,但听起来我对我正在做的事情有更多的控制权和权力。非常感谢。