Perl从带有Regex的URL中提取Youtube ID

时间:2013-05-07 16:47:50

标签: regex perl

我找到了大量代码here,以便从PHP中的YouTube网址中提取ID。

我现在遇到将此正则表达式转换为Perl的语法问题。

preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $link, $matches);

这与以下版本匹配,提取网址的这一部分:g6QrR5Uakeg

youtube.com/v/g6QrR5Uakeg
youtube.com/vi/g6QrR5Uakeg
youtube.com/?v=g6QrR5Uakeg
youtube.com/?vi=g6QrR5Uakeg
youtube.com/watch?v=g6QrR5Uakeg
youtube.com/watch?vi=g6QrR5Uakeg
youtu.be/g6QrR5Uakeg
www.youtube.com/v/g6QrR5Uakeg?feature=autoshare&version=3&autohide=1&autoplay=1

1 个答案:

答案 0 :(得分:2)

也许,

my ($id) = $url =~ m! (?: \bv i? [/=] | be/ ) (\w+) !x;

英文, 匹配字边界,然后字母'v',然后'i'出现0或1次。 然后匹配字符'/'或'='。

|代表“或”,所以如果现在匹配失败,请尝试使用字符'be /'.

如果上述任何内容成功,请使用\ w +来匹配我们正在寻找的ID。 (\ w是单词类,代表0-9 A-Z a-z和_)