我需要将任何有效链接与图像和youtube视频的链接分开匹配。我想把锚标签放在常规链接周围,但img和iframe标签分别放在图像和youtube视频周围。
这是我的代码
$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);
这忽略了常规链接,我如何修改它来检测链接而不检测其他两个?有没有更简单的方法?
感谢
使用两个否定的后备断言。
/^(http:'/'/([^'s]*)(?<!'.(?:jpg|gif|png))(?<!youtube'.com'/watch'?v='w{11}))$/
或者,使用#
作为分隔符,
#^(http://([^'s]*)(?<!'.(?:jpg|gif|png))(?<!youtube'.com/watch'?v='w{11}))$#
请注意,反向查找断言不能有可变长度的通配符。因此,人们必须期待一个规则,例如"YouTube视频由11个字符串标识。"
这是一个Rubular演示。