preg_match YouTube ID 并移除网址


preg_match youtube id and remove url

我正在尝试获取YouTube视频ID并将网址替换为YouTube视频ID。到目前为止,我找到了获取视频ID的方法,但我似乎无法删除该网址。

if (preg_match('%(?:youtube(?:-nocookie)?'.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu'.be/)([^"&?/ ]{11})%i', $url, $match)) {
    $video_id = $match[1];
}

例子:

   http://youtu.be/dQw4w9WgXcQ ...
   http://www.youtube.com/embed/dQw4w9WgXcQ ...
   http://www.youtube.com/watch?v=dQw4w9WgXcQ ...
   http://www.youtube.com/?v=dQw4w9WgXcQ ...
   http://www.youtube.com/v/dQw4w9WgXcQ ...
   http://www.youtube.com/e/dQw4w9WgXcQ ...
   http://www.youtube.com/user/username#p/u/11/dQw4w9WgXcQ ...
   http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/dQw4w9WgXcQ ...
   http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ ...         

请注意,YouTube 网址在视频 ID 后也可以包含额外的参数。

非常感谢很多帮助。谢谢!

对于所有示例网址,这preg_replace有效。此外,删除视频 ID 后的所有参数

$videoID =  preg_replace("#[&'?].+$#", "", preg_replace("#http://(?:www'.)?youtu'.?be(?:'.com)?/(embed/|watch'?v=|'?v=|v/|e/|.+/|watch.*v=|)#i", "", $url));

试试这个:

<?php
$url = 'http://www.youtube.com/?v=dQw4w9WgXcQ&foo=bar&test=baz';
$path = parse_url($url, PHP_URL_PATH);
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $args);
echo "http://www.youtube.com/watch?v=". $args['v'];

代码板示例