【问题标题】:Regex pattern to detect a link but not an image用于检测链接但不检测图像的正则表达式模式
【发布时间】:2014-07-06 11:35:52
【问题描述】:

我一直在玩正则表达式。几天前,我开始修改前段时间发现的正则表达式模式。它检测所有超链接,我的版本应该只检测超链接而不检测图像。

http://domain.com/someimage.jpg

不应被检测到。但它确实部分检测到图像。我不知道如何解决这个问题。

原来的正则表达式:

/(https?)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,10}(\/\S*)?/i

链接到我的版本:

http://regexr.com/38rv9

请帮忙。谢谢!

【问题讨论】:

  • 如果图像无法识别(通过 mod_rewrite 或类似方法)怎么办?
  • 这个想法是用户可以从 url 栏中粘贴链接。粘贴无法识别的图像不会是一个大问题。

标签: php regex url


【解决方案1】:

我会通过确保用户点击的内容不以图像文件扩展名结尾来实现这一点。你提到你正在使用 php;有一个与您的原始正则表达式匹配的条件语句:

/(https?)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,10}(\/\S*)?/i

但在表达式的 END 处不匹配任何常见的图像文件扩展名:

/^.*\.*[*(jpg$|jpeg$|gif$|png$|tif$)]/i

这适用于图像文件扩展名之前的任何文本字符串; preg_match 将有助于完成此任务。

【讨论】:

    【解决方案2】:

    你最后只需要一个空格。

    /((https?)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,10}(\/(?:(\S(?!jpg|jpeg|png|gif))*))?)\s/ig
    

    【讨论】:

    • np。你可以像这样缩短它。 /((https?)\S(\/(?:(\S(?!jpg|jpeg|png|gif))*))?)\s/ig 。但如果它有效,那么它的 okey :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2021-12-16
    • 2020-08-14
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多