我正在使用CURL下载页面。现在我想从页面中提取这个:
<object classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616" width="640"
height="303.33333333333"
codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab"
id="object701207571">
<param name="autoPlay" value="false" />
<param name="custommode" value="Stage6" />
<param name="src" value="" />
<param name="movieTitle" value="Titanic" />
<param name="bannerEnabled" value="false" />
<param name="previewImage"
value="http://stagevu.com/img/thumbnail/oripmqeqzrccbig.jpg" />
<embed type="video/divx" src="" width="640" height="303.33333333333"
autoPlay="false" custommode="Stage6" movieTitle="Titanic"
bannerEnabled="false"
previewImage="http://stagevu.com/img/thumbnail/oripmqeqzrccbig.jpg"
pluginspage="http://go.divx.com/plugin/download/"
id="embed701207571">
</embed>
</object>
请帮忙!
答案 0 :(得分:6)
这部分是为了回应Owens (因为我不能很好地将代码放在评论中)。该正则表达式可能不适用于object标记,主要是因为开始<object>
标记中包含属性。试试这个:
/(<object[^>]*>)(.*?)(<\/object>)/si
它不区分大小写并分为三组,以便于参考。它不是100%完美,但应该有所帮助。
答案 1 :(得分:4)
请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?了解为什么这可能是错误的。
那说你可能能够逃脱/(<object>.*?<\/object>)/s
之类的事情。这匹配字符串"<object>"
,后跟任意数量的字符,直到字符串"</object>"
。最后的s
告诉.
匹配换行符(通常不会)。
答案 2 :(得分:3)
使用SimpleXML:
$sxe = new SimpleXMLElement($xml);
$objects = $sxe->xpath('//object[@id="object701207571"]');
$object = $objects[0];
$params = $object->xpath('param');
foreach($params as $param)
{
$attrs = $param->attributes();
echo $attrs['name'] . ' = ' . $attrs['value'] . "\n";
}
// Get plain XML:
echo $object->asXML();
答案 3 :(得分:1)
$doc = DOMDocument::loadHTML($html);
foreach($node->getElementsByTagName('object') as $object)
{
echo $doc->saveXML($object);
}
答案 4 :(得分:0)
此正则表达式将匹配开始和结束标记之间的所有换行符,并在一个组中捕获整个事物
/(<object[^>]*?>(?:[\s\S]*?)<\/object>)/gi