2011-11-03 72 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

相關問題