【发布时间】:2016-01-06 14:30:53
【问题描述】:
我目前正在使用此正则表达式来捕获字符串中的所有 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)),如果字符串中的任何位置有.(png|gif|jpe?g),这将强制 url 不匹配。 Example -
是的,做到了。我快到了,但我没有尝试那个字符串的开头,但效果很好。我可能不得不研究你提到的其他功能,因为我不知道有这样的功能,但听起来我对我正在做的事情有更多的控制和权力。谢谢!
标签: php regex url preg-replace