我做错了吗? 我需要youtube代码,但它不会返回实际值。
if(preg_match_all("http:\/\/www\.youtube\.com\/v\/(.*)(.*)", $row->n_texto, $matches){
$code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg";
}
编辑 - ircmaxell 根据评论,文字中的链接结构为:
http:// www.youtube.com/v/plMvAh10HVg%26hl=en%26fs=1%26rel=0
更新
问题是:我的代码返回如下链接:
http://www.youtube.com/v/plMvAh10HVg%26hl=en%26fs=1%26rel=0
我可以在显示%26hl=en%26fs=1%26rel=0
之前使用regexp停止吗?
答案 0 :(得分:1)
你的正则表达式不正确。它有很多不妥之处。现在,就你想要的而言,试试这个:
#http://(?:.*)youtube.com/v/([^/\#?]+)#
现在,至于为什么,让我们看一下正则表达式:
http://(?:.*)youtube.com
您正在寻找一个以http://
开头的字符串,后面有www.
,ww2.
或任何内容的字符串。
/v/
您正在寻找/v/
作为网址的开头。
([^/\\#?]+)
您正在查找其他所有其他/
,查询字符串(?
)或锚点(#
)。所以这应该与您正在寻找的ID相匹配。
所以,它会是
if(preg_match("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){
$code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1]."/0.jpg";
}
如果你想找到所有:
if(preg_match_all("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){
foreach ($matches[1] as $match) {
$code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$match."/0.jpg";
}
}
答案 1 :(得分:0)
所提供的链接在www.youtube.com的第一个w之前有一个空格,您需要的代码是:
if(preg_match_all("%http://www\.youtube\.com/v/([\w]+)%i", $row->n_texto , $matches)){
$code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg";
}
此外,您拥有的网址已经过编码,您可能需要在使用之前使用urldecode($ row-> n_texto)。
答案 2 :(得分:-1)
^http://\w{0,3}.?youtube+\.\w{2,3}/watch\?v=[\w-]{11}