我想从html代码中获取所有唯一的YouTube视频ID
查看youtube视频的(或多个)对象/嵌入代码
//来自数据库的html
<p>loremm ipsum dolor sit amet enot
<a href="link" attribute=""blah blah blah">anchor link</a>
</p>
<object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"
type="application/x-shockwave-flash"
allowscriptaccess="always"
allowfullscreen="true"
width="425"
height="344">
</embed>
</object>
<image src="path/to/image.ext" >
<p>lorem ipsum dolor sit amet... blah</p>
<p>lorem ipsum dolor sit amet... blah</p>
<object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"
type="application/x-shockwave-flash"
allowscriptaccess="always"
allowfullscreen="true"
width="425"
height="344">
</embed>
</object>
<p>blah</p>
blah<br/>
blah<br/>
blah<br/>
Run Code Online (Sandbox Code Playgroud)
Jim*_*hel 19
YouTube视频网址通常有两种格式:
http://www.youtube.com/v/[videoid]
http://www.youtube.com/watch?v=[videoid]
Run Code Online (Sandbox Code Playgroud)
"www.youtube.com"可以替换为"www.youtube.co.uk"或其他国家/地区代码,但据我所知,无论域名如何,视频ID都是相同的.
视频ID是一个11字符的字符串,使用base-64编码.
假设您的代码将解析HTML文档中的网址,您可以确定它是否是YouTube视频网址并使用此正则表达式获取视频ID(使用C#编写,但应该很容易转换为php或其他任何内容):
"^http://(?<domain>([^./]+\\.)*youtube\\.com)(/v/|/watch\\?v=)(?<videoId>[A-Za-z0-9_-]{11})"
Run Code Online (Sandbox Code Playgroud)
这个特殊的正则表达式特定于youtube.com.让它了解所有不同的国家/地区代码(youtube.co.uk,youtube.pl,youtube.it等).
Sph*_*ere 12
实际上,为了完全捕捉所有选项,我发现WebFlakeStudio的解决方案是最好的,除了以下之外,还可以捕获所有3种形式的*咳嗽*客户端愚蠢*咳嗽*
(PHP)
preg_match('#(\.be/|/embed/|/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#', $YoutubeCode, $matches);
if(isset($matches[2]) && $matches[2] != ''){
$YoutubeCode = $matches[2];
}
Run Code Online (Sandbox Code Playgroud)
我添加了/ embed,这应该捕获所有.对象,URL和嵌入选项.
从htmlpurifier的youtube插件中肆无忌惮地被盗:
preg_match('#<object[^>]+>.+?http://www.youtube.com/v/([A-Za-z0-9\-_]+).+?</object>#s', $markup, $matches);
var_dump($matches[1]);
Run Code Online (Sandbox Code Playgroud)