2011-02-23 66 views

回答

19

您可以使用preg_match來獲取ID。我將覆蓋隨後表達自己在這個答案,但這裏是如何使用的preg_match的基本思想:

preg_match('expression(video_id)', "http://www.your.url.here", $matches); 
$video_id = $matches[1]; 

下面是對每種類型可能的輸入您問的表達式的崩潰。我包括一個鏈接,每個鏈接顯示一些測試用例和結果。

  1. 對於YouTube網址http://www.youtube.com/watch?v=89OpN_277yY,你可以使用​​表達:

    v=(.{11}) 
    
  2. YouTube的嵌入代碼可以是這樣的(一些外來的東西修剪):

    <object width="640" height="390"> 
        <param name="movie" value="http://www.youtube.com/v/89OpN_277yY?fs=... 
        ... 
    </object> 
    

    或者是這樣的:

    <iframe ... src="http://www.youtube.com/embed/89OpN_277yY" ... </iframe> 
    

    所以表達式來無論從風格獲得ID將this

    \/v\/(.{11})|\/embed\/(.{11}) 
    
  3. Vimeo的網址樣子http://vimeo.com/<integer>,據我可以告訴。我發現的最低值只是http://vimeo.com/2,我不知道是否有上限,但我現在假設它只限於10位數。希望有人能糾正我,如果他們知道的細節。可以使用This表達:

    vimeo\.com\/([0-9]{1,10}) 
    
  4. Vimeo的嵌入代碼採用這種形式:

    <iframe src="http://player.vimeo.com/video/<integer>" width="400" ... 
    

    所以可以使用this表達:

    player\.vimeo\.com\/video\/([0-9]{1,10}) 
    

    可替換地,如果長度的該數字最終可能會超過10,您可以使用:

    player\.vimeo\.com\/video/([0-9]*)" 
    

    記住,在"將需要用\如果你是封閉在雙引號中的表達進行轉義。


綜上所述,我不知道你怎麼想實現這一點,但你既可以將所有表達與|,或者你可以單獨匹配每一個。如果您希望我提供有關如何組合表達式的更多詳細信息,請對此答案添加評論。

+0

TNX您的答覆.. – 2011-05-06 09:07:30

+2

我似乎沒有當我使用這些正則表達式使用的preg_match得到任何比賽。我是否需要以某種方式修改它們,或者正則表達式的風格不同? – cowboybebop 2011-12-05 22:25:41

+0

感謝張貼這個,真的幫我出去的人 – Julian 2012-01-06 01:50:15

2

還有另外一個類似的[只適用於YouTube]在這裏回答,可能是有用的看看。 PHP Regex to get youtube video ID?

+1

感謝您的信息..它會有幫助.. – 2011-06-18 02:21:08

0

根據最新的youtube標準,您可以使用以下代碼從嵌入代碼中提取視頻ID。

$embed = '<iframe src="//www.youtube.com/embed/n6WYu-pSXH8" frameborder="0"></iframe>'; 
preg_match('~embed/(.*?)"~', $embed, $output); 
echo $output[1]; 

謝謝