2014-02-18 132 views
3

我想使用preg_match或regex從YouTube嵌入代碼獲取YouTube視頻ID。對於例如從嵌入的iframe代碼獲取YouTube視頻ID

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

我想借此ID 0gugBiEkLwU

誰能告訴我如何做到這一點。真的很適合你的幫助。

+0

[正則表達式模式以獲得在YouTube視頻中可能重複來自任何YouTube網址的ID](http://stackoverflow.com/questions/9594943/regex-pattern-to-get-the-youtube-video-id-from-any-youtube-url) – Rikesh

+0

[How to使用正則表達式查找字符串中的所有Youtube視頻ID?](http://stackoverflow.com/questions/5830387/how-to-find-all-youtube-video-ids-in-a-string-using-a-正則表達式) – HamZa

回答

4

您可以使用:

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

檢查演示Here

說明:

enter image description here

2

我知道這是相當晚了,但我想出了東西誰可能仍然在尋找的人。 由於不是所有的Youtube IFRAME SRC屬性中的「?相對=」結束,可以在另一個查詢字符串有時最終還是以雙引號結束,你可以使用:

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

這之後捕獲任何「/嵌入/ 「並在結束雙引號/查詢字符串之前。選擇可以包括任何字母,數字,下劃線和連字符。

這裏有多個實例演示:https://regex101.com/r/eW7rC1/1

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);