我尝试使用以下模式从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=NXwxHU2Q0bo 和 https://m.youtube.com/watch?v=w7P_F7DGPU0
从上面的网址获取视频ID需要包含哪些模式? 提前致谢
答案 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()
的第二个参数,它将直接吐出查询字符串。