我找到了大量代码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
答案 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和_)