首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从任何RegEx URL获取YouTube视频ID的YouTube模式

从任何RegEx URL获取YouTube视频ID的YouTube模式
EN

Stack Overflow用户
提问于 2012-03-07 02:23:37
回答 9查看 26.1K关注 0票数 10

让我们以这些URL为例:

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

这个PHP函数在第1种情况下不能正确地获得ID,但是在第2种情况下,情况1是非常常见的,任何东西都可以在YouTube ID后面出现。

代码语言:javascript
复制
/**
 * 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=",无论它在哪里的网址,并采取字符之后。这样,就不需要复杂的RegEx了。这是离基地吗?对起点有什么想法吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-03-20 10:40:18

代码语言:javascript
复制
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

票数 30
EN

Stack Overflow用户

发布于 2012-03-07 02:35:10

而不是regex。我强烈推荐parse_url()parse_str()

代码语言:javascript
复制
$url = "http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player";
parse_str(parse_url( $url, PHP_URL_QUERY ), $vars );
echo $vars['v'];    

完成

票数 9
EN

Stack Overflow用户

发布于 2012-03-07 02:34:05

你可以用parse_urlparse_str

代码语言:javascript
复制
$query_string = parse_url($url, PHP_URL_QUERY);
parse_str($query_string);
echo $v;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9594943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档