匹配视频共享网站的链接

时间:2011-01-13 12:53:01

标签: php regex

我正在尝试扫描文本以获取某些视频共享网站的链接,以便在链接视频时创建嵌入式播放器。

这是我到目前为止所得到的:

function extract(&$text) {
    // Scans text for links to YouTube, Vimeo, DailyMotion.

    // *keep ~discard
    // youtube.com/watch?v=[*alphanumeric]&[~whatever]
    // youtube-nocookie.com/watch?v=[*alphanumeric]&[~whatever]
    // vimeo.com/[*numeric]
    // dailymotion.com/video/[*alphanumeric]_[~whatever]

    $sites = 'youtube\.com|youtube-nocookie\.com|vimeo\.com|dailymotion\.com';
    $regex = '/^(http|https):\/\/(www\.|)(' . $sites . ')\/.*/';
    preg_match_all($regex, $text, $videos);
    return $videos;
}

这很奇怪。它在以下文本中找不到任何结果:

And what about YouTube videos?

http://www.youtube.com/timminchin#p/a/u/2/zkGEbRrNNtE

http://www.youtube.com/timminchin#p/a/f/1/zU4iyjoVWQ

http://www.youtube.com/watch?v=XzU4iyjoVWQ

http://www.youtube-nocookie.com

它在本文中找到了一个结果:

http://youtube.com/watch?v=XzU4iyjoVWQ

https://www.youtube.com/watch?v=XzU4iyjoVWQ

在仅包含单个链接的文本上可以正常工作。

我不像我应该那样使用正则表达式,并使用http://www.strfriend.com来帮助我构建这个。

我想要的只是一系列网址。

1 个答案:

答案 0 :(得分:0)

将正则表达式更改为以下内容:

/(http|https):\/\/(www\.|)(' . $sites . ')\/[^\s]*/

的差异:

开头的^使正则表达式只在文本的开头看,而不是在任何地方。

开头的[\s]确保您可以在一行文字中找到两个链接。

找不到最后一个URL,因为URL的末尾没有尾部斜杠。但是,如果您尝试检测视频,则无关紧要,因为视频始终位于子页面上。