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

此PHP函数在情况1中无法正确获取ID,但在情况2中将无法获取ID。情况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

以上是 RegEx模式可从任何YouTube URL获取YouTube视频ID 的全部内容, 来源链接: utcz.com/qa/399940.html

回到顶部