2011-02-23 35 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]; 

谢谢