Php 提取<;对象></对象>;
我正在使用CURL下载一个页面。现在我想从页面中提取以下内容: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
<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);
}