2011-11-03 81 views
1

看看回合,但找不到工作(和最近)的解决方案。正则表达式从完整的youtube视频ID <object>

利用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

+0

的可能重复[从PHP的HTML代码查看YouTube影片ID(http://stackoverflow.com/questions/1773822/get-youtube -video-id-from-html-code-with-php) – FailedDev

+0

试过了,似乎只是返回null。 – sgb

回答

1

获取src PARAM从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; 
+0

如上所述,整个从我使用的API作为单个字符串返回。 – sgb

+0

@samb看看我的编辑 – hsz

+0

新的SimpleXMLElement似乎没有成功解析。 ** SimpleXMLElement :: __ construct()[simplexmlelement.--construct]:Entity:line 1:parser error:EntityRef:expecting';'** – sgb

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')); 
+0

如何从这个'http:// www.youtube.com/v/ItT88H3nAWw'这样的字符串中提取id?棘手的是,YouTube提供了许多不同的方式来呈现他们的视频ID – Marcus

+0

查看上面的新版本。你也可以搜索'min(strpos($ s,'?',$ p),strpos($ s,''',$ p))'来查找id的结尾。 – PiTheNumber

相关问题