我正在尝试扫描文本以获取某些视频共享网站的链接,以便在链接视频时创建嵌入式播放器。
这是我到目前为止所得到的:
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来帮助我构建这个。
我想要的只是一系列网址。
答案 0 :(得分:0)
将正则表达式更改为以下内容:
/(http|https):\/\/(www\.|)(' . $sites . ')\/[^\s]*/
的差异:
开头的^
使正则表达式只在文本的开头看,而不是在任何地方。
开头的[\s]
确保您可以在一行文字中找到两个链接。
找不到最后一个URL,因为URL的末尾没有尾部斜杠。但是,如果您尝试检测视频,则无关紧要,因为视频始终位于子页面上。