使用preg_match解析YouTube视频ID

2022-08-30 09:06:53

我正在尝试使用preg_match解析YouTube网址的视频ID。我在这个网站上找到了一个似乎有效的正则表达式;

(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+

如下图所示:

alt text

我的PHP如下所示,但它不起作用(给出未知修饰符“[”错误)...

<?
 $subject = "http://www.youtube.com/watch?v=z_AbfPXTKms&NR=1";

 preg_match("(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+", $subject, $matches);

 print "<pre>";
 print_r($matches);
 print "</pre>";

?>

干杯


答案 1

这个正则表达式从我能找到的所有各种URL中获取ID...那里可能还有更多,但我在任何地方都找不到它们的参考。如果您遇到不匹配的,请在URL上发表评论,我会尝试更新正则表达式以匹配您的URL。

if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/\s]{11})%i', $url, $match)) {
    $video_id = $match[1];
}

以下是此正则表达式匹配的URL的示例:(给定URL之后可以有更多内容将被忽略)

它还适用于具有上述相同选项 youtube-nocookie.com URL。

它还将从嵌入代码(iframe和对象标记)中的URL中提取ID


答案 2

最好使用parse_urlparse_str来解析 URL 和查询字符串:

$subject = "http://www.youtube.com/watch?v=z_AbfPXTKms&NR=1";
$url = parse_url($subject);
parse_str($url['query'], $query);
var_dump($query);

推荐