从嵌入的iframe代码中获取YouTube视频ID

时间:2014-02-18 05:29:07

标签: php regex iframe youtube

我想使用preg_match或regex从YouTube嵌入代码中获取YouTube视频ID。例如

<iframe width="560" height="315" src="//www.youtube.com/embed/0gugBiEkLwU?rel=0" frameborder="0" allowfullscreen></iframe> 

我想获取ID 0gugBiEkLwU

任何人都可以告诉我如何做到这一点。非常适合你的帮助。

4 个答案:

答案 0 :(得分:6)

将此模式与捕获组一起使用可以为您提供所需的字符串:

d\/(\w+)\?rel=\d+"

示例:https://regex101.com/r/kH5kA7/1

答案 1 :(得分:3)

您可以使用:

src="\/\/(?:https?:\/\/)?.*\/(.*?)\?rel=\d*"

检查演示 Here

说明:

enter image description here

答案 2 :(得分:2)

我知道这已经很晚了,但是我想出了一些可能仍在寻找的人。 由于并非所有Youtube iframe src属性都以“?rel =”结尾,并且有时可以在另一个查询字符串中结尾或以双引号结尾,因此您可以使用:

/embed\/([\w+\-+]+)[\"\?]/

这会在“/ embed /”之后和结束的双引号/查询字符串之前捕获任何内容。选择可以包括任何字母,数字,下划线和连字符。

以下是一个包​​含多个示例的演示:https://regex101.com/r/eW7rC1/1

答案 3 :(得分:0)

以下功能会从youtube网址的所有格式中提取YouTube视频ID,

function getYoutubeVideoId($iframeCode) {

    // Extract video url from embed code
    return preg_replace_callback('/<iframe\s+.*?\s+src=(".*?").*?<\/iframe>/', function ($matches) {
        // Remove quotes
        $youtubeUrl = $matches[1];
        $youtubeUrl = trim($youtubeUrl, '"');
        $youtubeUrl = trim($youtubeUrl, "'");
        // Extract id
        preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $youtubeUrl, $videoId);
        return $youtubeVideoId = isset($videoId[1]) ? $videoId[1] : "";
    }, $iframeCode);

}

$iframeCode = '<iframe width="560" height="315" src="http://www.youtube.com/embed/0gugBiEkLwU?rel=0" frameborder="0" allowfullscreen></iframe>';

// Returns youtube video id
echo getYoutubeVideoId($iframeCode);