【问题标题】:Regex to get youtube video ID from full <object>正则表达式从完整的 <object> 获取 youtube 视频 ID
【发布时间】:2011-11-03 11:20:26
【问题描述】:

环顾四周,但找不到可行的(和最近的)解决方案。

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

【问题讨论】:

标签: php regex youtube


【解决方案1】:

embed标签WITHOUT正则表达式中获取src参数。然后按以下方式解析:

$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;

【讨论】:

  • 如上所述,整个 从我正在使用的 API 作为单个字符串返回。
  • new SimpleXMLElement 似乎没有成功解析。 SimpleXMLElement::__construct() [simplexmlelement.--construct]:实体:第 1 行:解析器错误:EntityRef:期待 ';'
  • 虽然simpleXMLElement不起作用,但我使用PHP的简单HTML DOM解析器来处理html并提取url。
【解决方案2】:

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

【讨论】:

  • 如何从http://www.youtube.com/v/ItT88H3nAWw 这样的字符串中提取id?棘手的是,youtube 提供了很多不同的方式来展示他们的 video-id
  • 见上面的新版本。您也可以搜索 min(strpos($s, '?', $p), strpos($s, '"', $p)) 来查找 id 的结尾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 2011-04-08
  • 2018-07-08
  • 2011-08-08
  • 2014-07-25
  • 1970-01-01
相关资源
最近更新 更多