【问题标题】:PHP RegEx Replace All URLs That Aren't ImagesPHP RegEx 替换所有不是图像的 URL
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多