我收到了这段代码:
if(preg_match("/^(?:https?:\/\/)?(?:www\.)?youtu(.be\/|be\.com\/watch\?v=)(\w{11})$/", $url)){
preg_match("/^(?:https?:\/\/)?(?:www\.)?youtu(.be\/|be\.com\/watch\?v=)(\w{11})$/", $url, $matches);
$vid = str_replace(' ', '', $matches[0]);
}
几乎检查网址是否为Youtube视频。如何将URL中的最后11个字符分配给$vid
变量?
示例:
网址:https://www.youtube.com/watch?v=ASDASDASDAS
$vid = ASDASDASDAS
答案 0 :(得分:0)
首先,您不想检查最后11个字符,因为视频ID可能会随时更改为不同的长度。你应该做的就是做足够灵活的事情。因此,在这种情况下,您应该检查?.*v=([^&]+)
,因为这将获得匹配,直到下一个&
。所以你的代码看起来像这样:
//make this a variable, since you're using it multiple times.
$re = "/^(?:https?:\/\/)?(?:www\.)?youtu(.be|be\.com)\/watch\?.*?v=([^&#]+).*$/";
if (preg_match($re, $url)){
preg_match($re, $url, $matches);
$vid = $matches[2]; //the 2nd group in the match, so the 2nd set of ()s
}
在该代码中,包含其他网址参数的视频网址仍然可以使用,而且视频ID的长度也更加灵活。
Demo - 向右侧显示2.
,它会在那里提及视频ID(这是$vid
内的内容)。
答案 1 :(得分:0)
也许是这样的:
$vid = substr($url,strlen($url)-11);
答案 2 :(得分:0)
parse_str和parse_url函数将完成工作(不需要正则表达式):
$link = 'https://www.youtube.com/watch?v=ASDASDASDAS';
parse_str( parse_url( $link, PHP_URL_QUERY ), $query );
print_r( $query );
/*
Array
(
[v] => ASDASDASDAS
)
*/
答案 3 :(得分:0)
已经做出了直截了当(正确)的答案,但我建议您查看oembed standard和图书馆的php https://code.google.com/p/php-oembed/。这将有助于您从几乎所有图像/视频服务获取信息,生成嵌入代码等。