php – RegEx模式,用于从任何YouTube网址获取YouTube视频ID

我们以这些网址为例:

> http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player
> http://www.youtube.com/watch?v=8GqqjVXhfMU

这个PHP函数不会在案例1中正确获取ID,但是在案例2中.案例1非常常见,其中任何内容都可以在YouTube ID后面.

/**
 * get YouTube video ID from URL
 *
 * @param string $url
 * @return string YouTube video id or FALSE if none found. 
 */
function youtube_id_from_url($url) {
    $pattern = 
        '%^# Match any YouTube URL
        (?:https?://)?  # Optional scheme. Either http or https
        (?:www\.)?      # Optional www subdomain
        (?:             # Group host alternatives
          youtu\.be/    # Either youtu.be,
        | youtube\.com  # or youtube.com
          (?:           # Group path alternatives
            /embed/     # Either /embed/
          | /v/         # or /v/
          | /watch\?v=  # or /watch\?v=
          )             # End path alternatives.
        )               # End host alternatives.
        ([\w-]{10,12})  # Allow 10-12 for 11 char YouTube id.
        $%x'
        ;
    $result = preg_match($pattern, $url, $matches);
    if (false !== $result) {
        return $matches[1];
    }
    return false;
}

我在想的是,必须有一种方法可以只查找“v =”,无论它在URL中的哪个位置,并在此之后取出字符.通过这种方式,不需要复杂的RegEx.这是基地吗?任何关于起点的想法?

解决方法:

if (preg_match('/youtube\.com\/watch\?v=([^\&\?\/]+)/', $url, $id)) {
  $values = $id[1];
} else if (preg_match('/youtube\.com\/embed\/([^\&\?\/]+)/', $url, $id)) {
  $values = $id[1];
} else if (preg_match('/youtube\.com\/v\/([^\&\?\/]+)/', $url, $id)) {
  $values = $id[1];
} else if (preg_match('/youtu\.be\/([^\&\?\/]+)/', $url, $id)) {
  $values = $id[1];
}
else if (preg_match('/youtube\.com\/verify_age\?next_url=\/watch%3Fv%3D([^\&\?\/]+)/', $url, $id)) {
    $values = $id[1];
} else {   
// not an youtube video
}

这是我用来从youtube网址中提取id的方法.我认为它适用于所有情况.

请注意,视频的结尾$values = id

上一篇:javascript – 如何使用HTML 5播放Youtube视频的音频?


下一篇:javascript – 如何阻止网站加载iframe?