Извлечь все между <object></object> - PullRequest
2 голосов
/ 04 апреля 2009

Я использую 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 ]

6 голосов
/ 04 апреля 2009

Это частично в ответ на Оуэнса (потому что я не могу поместить код в комментарий очень хорошо) . Это регулярное выражение может не работать для тега объекта, в основном потому, что открывающий тег <object> содержит атрибуты. Попробуйте вместо этого:

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

Он нечувствителен к регистру и разбит на три группы для удобства. Это не на 100% идеально, но должно помочь.

4 голосов
/ 04 апреля 2009

См. Можете ли вы привести некоторые примеры того, почему трудно проанализировать XML и HTML с помощью регулярного выражения? , почему это, вероятно, неправильно.

Тем не менее, вы могли бы избежать неприятностей с чем-то вроде /(<object>.*?<\/object>)/s. Это соответствует строке "<object>", за которой следует любое количество символов до строки "</object>". s в конце указывает . на совпадение строк (обычно это не так).

3 голосов
/ 04 апреля 2009

Использование 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();
1 голос
/ 04 апреля 2009
$doc = DOMDocument::loadHTML($html);
foreach($node->getElementsByTagName('object') as $object)
{
   echo $doc->saveXML($object);
}
0 голосов
/ 04 апреля 2009

это регулярное выражение будет соответствовать всем разрывам строк между открывающим и закрывающим тегами и захватывать всю вещь в одной группе

/(<object[^>]*?>(?:[\s\S]*?)<\/object>)/gi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...