2009-04-04 11 views
2

私はCURLを使用してページをダウンロードしています。今私はページからこれを抽出したいと思います:すべてを抽出する<object></object>

<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

私はあなたを助けているだろう私が何を意味しているか知っていれば、あなたはいくつかの考えを示して、試してみてください。そこには多くのRegexの例があります。 – bchhun

答えて

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は、改行に一致するように.に指示します(通常はそうではありません)。

+0

+1最初の段落。 – strager

6

これはOwens に部分的に対応しています(コメントにコードを入力できないため)その正規表現はオブジェクトタグのためには機能しないかもしれませんが、基本的には開封<object>タグに属性があるためです。これを代わりに試してください:

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

大文字と小文字は区別されず、簡単に参照できるように3つのグループに分かれています。 100%完璧ではありませんが、助けてください。

+0

>は、属性値IIRCで合法です。 – strager

+0

また、これはネストするを処理しません。 – strager

+0

これは、RegexでHTMLを解析するのが難しい理由です。しかし、これは彼の試みのために働くでしょう。 –

0

開始タグと終了タグの間のすべての改行にマッチして使用して一つのグループ

/(<object[^>]*?>(?:[\s\S]*?)<\/object>)/gi 
+0

オブジェクトがネストされている場合、これは失敗します。 – Kornel

+0

right ..しかし、私はオブジェクトの中にネストされたオブジェクトを見たことがないと思う。 –

+0

これは完全に合法だ。見たことある。たとえば、フラッシュオブジェクト内のビデオオブジェクト内にイメージオブジェクトを配置することができます。 – strager

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(); 
1
$doc = DOMDocument::loadHTML($html); 
foreach($node->getElementsByTagName('object') as $object) 
{ 
    echo $doc->saveXML($object); 
} 
関連する問題