我有一个使用正则表达式并返回YouTube URL数组的函数。
function getYoutubeUrlsFromString($string) {
$regex = '#(https?:\/\/(?:www\.)?(?:youtube.com\/watch\?v=|youtu.be\/)([a-zA-Z0-9]*))#i';
preg_match_all($regex, $string, $matches);
$matches = array_unique($matches[0]);
usort($matches, function($a, $b) {
return strlen($b) - strlen($a);
});
return $matches;
}
例:
$html = '<p>hello<a href="https://www.youtube.com/watch?v=7HknMcG2qYo">world</a></p><p>hello<a href="https://youtube.com/watch?v=37373o">world</a></p>';
$urls = getYoutubeUrlsFromString($html);
可以很好地用于以下网址:
https://www.youtube.com/watch?v=KZhJT3COzPc
但不适用于以下网址:
https://www.youtube.com/embed/VBp7zW9hxZY
如何更改正则表达式,使其获得这种类型的YouTube URL?
最佳答案
这应该同时允许watch?v=
和embed/
'#(https?:\/\/(?:www\.)?(?:youtube.com\/(?:watch\?v=|embed\/)|youtu.be\/)([a-zA-Z0-9]*))#i';
请注意,您还应该转义.com或.be的点,否则它将接受任何字符:
'#(https?:\/\/(?:www\.)?(?:youtube\.com\/(?:watch\?v=|embed\/)|youtu\.be\/)([a-zA-Z0-9]*))#i';
关于regex - 使用正则表达式获取存储在字符串中的YouTube URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34454935/