Php 提取<;对象></对象>;

Php 提取<;对象></对象>;,php,regex,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"> <p

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

请帮忙

看看为什么这样做可能是错误的


也就是说,您可能可以通过类似
/(.*)/s
的方式逃脱惩罚。这将匹配字符串
”,后跟任何数量的字符,直到字符串
。结尾的
s
告诉
匹配换行符(通常不匹配)。

这部分是对Owens的回应(因为我不能很好地将代码放在注释中)。该正则表达式可能不适用于对象标记,基本上是因为开头的
标记中有属性。试试这个:

/(<object[^>]*>)(.*?)(<\/object>)/si
/(]*>)(.*?)/si

它不区分大小写,分为三组以便于参考。它不是100%完美,但应该会有所帮助。

此正则表达式将匹配开始标记和结束标记之间的所有换行符,并在一个组中捕获整个内容

/(<object[^>]*?>(?:[\s\S]*?)<\/object>)/gi
/(]*?>(?:[\s\s]*?)/gi
使用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();

如果你明白我的意思,我会帮助你的,如果你表现出一些思考和尝试。有很多正则表达式示例。>在属性值IIRC中是合法的。而且,这不处理嵌套。这就是为什么很难用正则表达式解析HTML。但这对他的尝试是有效的。是的,这些是尝试使用正则表达式的危险,这就是为什么我使用了他所展示的半心半意的匹配方法。任何试图防弹正则表达式的时间都应该用来学习如何使用解析器。如果对象是嵌套的,这将失败。对。。但我认为我从未见过嵌套在object中的对象这是完全合法的。我看到了。例如,可以将图像对象放在flash对象中的视频对象中。
$doc = DOMDocument::loadHTML($html);
foreach($node->getElementsByTagName('object') as $object)
{
   echo $doc->saveXML($object);
}