0

我需要将任何有效链接与图像和 youtube 视频的链接分开匹配。我想在常规链接周围放置锚标签,但在图像和 youtube 视频周围分别放置 img 和 iframe 标签。

这是我的代码

$str = "some stuff with links"

    $output = preg_replace('#(http://([^\s]*)\.(jpg|gif|png))#', 
                    '<img src="$1" alt="" width="" height="" />', $str);



    $output = preg_replace('#(http://([^\s]*)youtube\.com/watch\?v=([^\s]*))#', 
                  '<iframe width="420" height="315" src="http://www.youtube.com/embed/$3" frameborder="0" allowfullscreen></iframe>', $output);

    var_dump($output);

这忽略了常规链接,如何修改它以检测链接而不是其他两个?有没有更简单的方法?

谢谢

4

1 回答 1

1

使用两个否定的lookbehind断言。

/^(http:\/\/([^\s]*)(?<!\.(?:jpg|gif|png))(?<!youtube\.com\/watch\?v=\w{11}))$/

或者,#用作分隔符,

#^(http://([^\s]*)(?<!\.(?:jpg|gif|png))(?<!youtube\.com/watch\?v=\w{11}))$#

请注意,否定的lookbehind 断言不能有可变长度的通配符。因此,必须期待一条规则,例如“YouTube 视频由 11 个字符的字符串标识”。

这是一个Rubular 演示

于 2012-08-05T08:11:45.847 回答