【问题标题】:regex to convert plain image url to img tags正则表达式将纯图像 url 转换为 img 标签
【发布时间】:2014-08-28 13:52:00
【问题描述】:

我知道还有其他主题,但其中大多数都有不同的问题。 我正在尝试匹配纯文本中的图像网址并将它们转换为标签,但正则表达式无法正常工作

/(http|https):\/\/(\S*)\.(jpg|gif|png)(\?(\S*))?/i

上面应该匹配带有 url 字符串的图像:

http://www.example.com/landscape.jpg?w=120

并且没有查询字符串:

http://www.example.com/landscape.jpg

但它不应该匹配这个,注意最后的 X

http://www.example.com/landscape.jpgx

这不是图像的 url,而我当前的正则表达式与之匹配,我如何调整正则表达式不匹配最后一个 URL 格式?

【问题讨论】:

    标签: php regex image preg-replace preg-match


    【解决方案1】:

    试试这个...

    $string = 'This is image inside text string http://localhost/test/something.jpg?xml=10, http://google.com/logo.png'; 
    function _callback($matches){
    return '<img src="'.$matches[0].'" />'
    }
    
    echo preg_replace_callback('/https?:\/\/(.*?)\.(jpg|png|gif)(\?\w+=\w+)?/i', '_callback', $string);
    

    【讨论】:

      【解决方案2】:

      试试这个:

      '/^https?\:\/\/\S+\.(jpg|gif|png)(\?\S+\=\S+)?$/i'
      

      【讨论】:

      • 您可能还想为图像添加 jpeg 和其他公认的文件扩展名。
      • 谢谢,但规则似乎不起作用,查询字符串应该是可选的,我认为你的规则是required
      • (\?\S+\=\S+)? 应该是可选的。
      • 嘿,看起来像一个很棒的正则表达式......不过,稍微解释一下会改善你的答案。不要忘记所有新手都在 Stack Overflow 上,并且可能想了解您如何将它组合在一起以及它如何解决问题......而对您来说可能很明显的东西可能对他们来说并不明显。通常,添加更多关于您更改的内容以及为什么可以解决原始海报问题的信息是很好的形式。否则,您最终会进入“低质量帖子”审核队列;)
      【解决方案3】:

      您可以在末尾添加一个lookahead,以检查网址之后的下一个字符(此处为空格字符、字符串结尾或标点符号)

      ~https?://\S+\.(?:jpe?g|gif|png)(?:\?\S*)?(?=\s|$|\pP)~i
      

      【讨论】:

      • 似乎可行,谢谢,这是我最后的 PHP 代码,我需要强制 http:$text = preg_replace('/(http|https):\/\/(\S*)\.(jpg|gif|png)(\?(\S*))?(?=\s|$|\pP)/i', '&lt;img src="http://$2.$3$4" border="0" alt="" /&gt;', $text, 1);
      猜你喜欢
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 2015-03-12
      相关资源
      最近更新 更多