我需要一种匹配的模式
youtube.com/watch?v=iNAMI8DQc8M
和
youtu.be/iNAMI8DQc8M
它应该返回视频ID,在本例中为iNAMI8DQc8M
我尝试了这种模式:
youtu[.*][be|be'.com]'/+(.+)
但这行不通,我对正则表达式不是很好。
$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
第一部分检查 . 之前是。它可能在那里,但不需要在那里。 '.?be
.com/watch?v= 部分也有一个检查,这也是不必要的,但可以。 ('.com'/watch'?v=)?
之后,我们匹配视频 ID。 (['w]+)
始终使用特定于您的问题的工具。在这种情况下是parse_url();
print_r( parse_url('http://' . $youtube); );
当有适合您的任务的解析器时,不鼓励使用正则表达式
这是正确的表达方式,根据用户 mts7 的答案更正。
/youtu'.?be'/?('.com'/watch'?v=)?/
我对正则表达式也不太了解。但在这种情况下,我使用了在线正则表达式验证器。您可以在此处检查此表达式是否有效:
http://www.regexr.com/39u0c