我目前正在使用此正则表达式来捕获字符串中的所有URL,这些URL可能是多行并包含任何其他类型的文本,这对于普通URL非常有效。但我想以不同的方式替换图片网址,因此我当前的表达式无法匹配这些网址。
我目前的表达是
(https?:\/\/([-\w\.]+[-\w])+(:\d+)?(\/([\w\/_\.#-]*(\?\S+)?[^\.\s])?)?)
但我不希望它匹配以(jpe?g | png | gif)结尾的网址,而且我还无法弄清楚如何使用RegEx负面预测。< / p>
答案 0 :(得分:3)
实际上,通过匹配所有网址然后检查它们来检查网址会更容易。或者使用preg_replace_callback,这将允许您检查匹配上的其他内容并添加其他逻辑以检查它是什么类型的URL。您只需使用回调切换替换值,并且回调中返回的内容是替换的内容。
但是,如果您想使用单个正则表达式,请在模式的开头添加类似的内容:(?!\S+(?:png|gif|jpe?g))
如果字符串中的任何位置.(png|gif|jpe?g)
,则会强制网址不匹配