1

我在这里找到了大量代码来从PHP.

我现在在将此正则表达式转换为Perl.

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

这匹配以下版本,提取这部分 URL: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
4

1 回答 1

2

也许,

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

在英语中,匹配单词边界,然后是字母“v”,然后是出现 0 或 1 次的“i”。然后匹配字符'/'或'='。

| 代表“或”,因此如果现在匹配失败,请尝试使用字符“be/”。

如果上述任何一项成功,请使用 \w+ 来匹配我们正在寻找的 ID。(\w 是词类,代表 0-9 AZ az 和 _)

于 2013-05-07T17:17:55.150 回答