我想从对象/嵌入html源获取视频网址。我读过我可以使用正则表达式来获取它,但我和正则表达式都不是朋友
所以我拥有的东西:
<?php
function src($text) {
$text = str_replace('"', '', $text);
$text = str_replace('src=', '', $text);
$temporary = explode('<embed', $text);
$temporary = $temporary[1];
$temporary = explode(' ', trim($temporary));
return $temporary[0];
}
$html = '
<object width="180" height="220">
<param name="movie" value="http://www.domain.com/video/video1.swf"></param>
<embed src="http://www.domain.com/video/video1.swf" type="application/x-shockwave-flash" width="180" height="220"></embed>
</object>
';
echo src($html);
这有效,但正则表达式更好吗?
我正在使用灯答案 0 :(得分:14)
正则表达式更适用于这种情况,因为src
可能永远不会出现在第一个属性,因此这不会起作用。
以下是我的建议:
function src($html) {
if(preg_match('#<embed[^>]*?src=["\'](.*?)["\'](.*?)></embed>#si', stripslashes($html), $src)) {
return $src[1];
}
return ''; // or any other error if you need
}
echo src($html);
将输出:http://www.domain.com/video/video1.swf
[^>]
匹配括号内未包含的单个字符。 [^>;]匹配>
["\']
匹配src="
或src='
(.*?)
点(。)表示匹配任何字符。星号(*)表示零次或多次。并且问号(?)意味着贪婪并且只要模式仍然匹配就继续。把它们放在一起,就意味着尝试匹配任何角色,零次或多次,并获得尽可能多的
/i
不区分大小写
以下是更多信息:
答案 1 :(得分:1)
为什么不使用DOM解析器;它的目的是做这种工作。
$dom = new DOMDocument;
$dom->loadHTML($html);
$embed = $dom->getElementsByTagName('embed');
if ($embed->length) {
$embed = $embed->item(0);
if ($embed->hasAttribute('src')) {
$src = $embed->getAttribute('src');
// `$src` holds the `src` attribute of the `embed` element.
}
}