我正在尝试使用 preg_match 解析 youtube URL 的视频 ID。我在这个网站上发现了一个似乎有效的正则表达式;
(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+
如图所示:
我的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>";
?>
干杯
最佳答案
这个正则表达式从我能找到的所有各种 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 之后可以有更多内容将被忽略)
- http://youtu.be/dQw4w9WgXcQ ...
- http://www.youtube.com/embed/dQw4w9WgXcQ ...
- http://www.youtube.com/watch?v=dQw4w9WgXcQ ...
- http://www.youtube.com/?v=dQw4w9WgXcQ ...
- http://www.youtube.com/v/dQw4w9WgXcQ ...
- http://www.youtube.com/e/dQw4w9WgXcQ ...
- http://www.youtube.com/user/username#p/u/11/dQw4w9WgXcQ ...
- http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/dQw4w9WgXcQ ...
- http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ ...
- http://www.youtube.com/?feature=player_embedded&v=dQw4w9WgXcQ ...
它也适用于具有上述相同选项的 youtube-nocookie.com URL。
它还会在嵌入代码(iframe 和对象标签)中从 URL 中提取 ID
关于php - 使用 preg_match 解析 youtube 视频 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936467/