提取<object> </object>之间的所有内容

时间:2009-04-04 14:22:14

标签: php regex

我正在使用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>

请帮忙!

5 个答案:

答案 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