用于从youtube网址获取视频ID的模式

时间:2017-03-24 13:31:27

标签: php regex youtube

我尝试使用以下模式从youtube网址获取youtube ID。它似乎适用于普通的YouTube网址,

$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/
          | /&v=/       # or ?feature=youtu.be&v=NXwxHU2Q0bo
          | /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 ($result) {
            return $matches[1];
        }

但此网址失败https://www.youtube.com/watch?feature=youtu.be&v=NXwxHU2Q0bohttps://m.youtube.com/watch?v=w7P_F7DGPU0

从上面的网址获取视频ID需要包含哪些模式? 提前致谢

2 个答案:

答案 0 :(得分:6)

以下是解决方案:

^# Match any youtube URL
    (?:https?://)?  # Optional scheme. Either http or https
    (?:
        www\. # Optional www subdomain
      | m\.   # Optional mobile subdomain
    )?      
    (?:             # Group host alternatives
      youtu\.be/    # Either youtu.be,
    | youtube\.com  # or youtube.com
      (?:           # Group path alternatives
        /           # Shortlink
      | /embed/     # Either /embed/
      | /v/         # or /v/
      | /&v=/       # or ?feature=youtu.be&v=NXwxHU2Q0bo
      | /watch\?v=  # or /watch\?v=
      | /watch\?feature=youtu\.be&v= # alternativ link with watch
      )             # End path alternatives.
    )               # End host alternatives.
    ([\w-]{10,12})  # Allow 10-12 for 11 char youtube id.
    $

https://regex101.com/r/LiCquP/2

https://regex101.com/r/LiCquP/3

对于测试:)

答案 1 :(得分:1)

另一种方法是使用parse_url()parse_str()函数。这是一个迭代您提供的两个URL的示例:

<?php
$youtube_urls = array(
    'https://m.youtube.com/watch?v=w7P_F7DGPU0',
    'https://www.youtube.com/watch?feature=youtu.be&v=NXwxHU2Q0bo'
);

foreach($youtube_urls as $youtube_url){
    $video_id = NULL;

    $parsed_url = parse_url($youtube_url);

    if( isset($parsed_url['query']) ){
        parse_str($parsed_url['query'],$query_params);

        if( isset($query_params['v']) ){
            $video_id = $query_params['v'];
        }

    }

    echo $video_id.'<br>';
}

http://php.net/manual/en/function.parse-url.php

http://php.net/manual/en/function.parse-str.php

此外,您可以使用PHP_URL_QUERY组件作为parse_url()的第二个参数,它将直接吐出查询字符串。

相关问题