PHP preg_match模式 - 小问题

时间:2014-11-17 23:57:01

标签: php regex preg-match

我需要一个匹配

的模式
  

youtube.com/watch?v=iNAMI8DQc8M

  

youtu.be/iNAMI8DQc8M

它应该返回视频ID,在这种情况下 iNAMI8DQc8M

我尝试了这种模式:

youtu[.*][be|be\.com]\/+(.+)

但这不起作用,我对正则表达式并不是很好。

3 个答案:

答案 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验证器。您可以在此处查看此表达式:

http://www.regexr.com/39u0c