我需要一个匹配
的模式youtube.com/watch?v=iNAMI8DQc8M
和
youtu.be/iNAMI8DQc8M
它应该返回视频ID,在这种情况下 iNAMI8DQc8M
我尝试了这种模式:
youtu[.*][be|be\.com]\/+(.+)
但这不起作用,我对正则表达式并不是很好。
答案 0 :(得分:0)
$str = 'youtube.com/watch?v=iNAMI8DQc8M';
$id = get_id($str);
function get_id($str) {
$matches = array();
if (preg_match('/youtu\.?be\/?(\.com\/watch\?v=)?([\w]+)/', $str, $matches)) {
$id = $matches[2];
}
return $id;
}
它非常宽容,但它确实有效。
我们知道你无论如何都会在那里,所以它就在那里。 youtu
第一部分检查a。之前是。它可能在那里,但不需要在那里。 \.?be
还检查.com / watch?v = part,这也是不必要的,但可以。 (\.com\/watch\?v=)?
之后,我们会匹配视频ID。 ([\w]+)
答案 1 :(得分:0)
始终使用特定于您的问题的工具。在这种情况下是parse_url();
print_r( parse_url('http://' . $youtube); );
当您的任务有适当的解析器
时,不鼓励正则表达式答案 2 :(得分:0)
这是正确的表达式,根据用户mts7的回答进行了更正。
/youtu\.?be\/?(\.com\/watch\?v=)?/
我对正则表达式也不太了解。但我在这种情况下使用了在线regexp验证器。您可以在此处查看此表达式: