正则表达式从完整的<object> </object>获取youtube视频ID

时间:2011-11-03 11:20:26

标签: php regex youtube

看了一眼,但找不到适合的工作(和最近的)解决方案。

使用API​​我收到的字符串如下:

<object width="600" height="338">
    <param name="movie" value="http://www.youtube.com/v/ItT88H3nAWw?version=3&feature=oembed"></param>
    <param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
    <embed src="http://www.youtube.com/v/ItT88H3nAWw?version=3&feature=oembed" type="application/x-shockwave-flash" width="600" height="338" allowscriptaccess="always" allowfullscreen="true"></embed>
</object>

PHP中的正则表达式只提取视频ID?例如ItT88H3nAWw

2 个答案:

答案 0 :(得分:1)

src代码没有正则表达式获取embed参数。然后按照以下方式解析它:

$youtubeUrl = 'http://www.youtube.com/v/ItT88H3nAWw?version=3&feature=oembed';

if ( preg_match('youtube\.\w+.*?v[/=](\w+)', $youtubeUrl, $matches) ) {
  $youtubeId = $matches[1];
}

这个正则表达式将处理两个:

要将HTML字符串转换为对象,请使用SimpleXMLElement

$obj = new SimpleXMLElement($htmlCode);
$youtubeUrl = $obj->embed->src;

答案 1 :(得分:0)

Regexp is ugly。请使用以下内容:getBetween('www.youtube.com/v/','?version')

好的,这是另一个版本。假设$s是您的字符串而youtube不会更改它的ID长度:

$p = strpos($s, 'youtube.com/v/') + count('youtube.com/v/');
$id = substr($s, $p, count('ItT88H3nAWw') );