2012-04-30 4 views
0

WebページのHTMLからデータを抽出するには、次のHTMLコードPHP - 私は単語を抽出する必要が

<div id="tab-soiree" class=""><div class="soireeagenda cat_1"> 
      <a href="/event/83318/" class="lienFly"><img src="http://www.parisbouge.com/img/fly/resize/100/83318.jpg" alt="fiesta erasmus" class="fly"></a> 
       <ul> 
        <li class="nom"><h2><a href="/event/83318/">FIESTA ERASMUS</a> </h2></li> 
        <li class="genre" style="margin-bottom:4px;"> 
        <a href="/soirees-etudiantes/paris/1/" style="color:inherit;" title="soirée étudiante">soirée étudiante</a>    </li> 
        <li class="lieu"><a href="/club/paris/10/duplex">Duplex</a></li>    <li class="musique">house, electro, r&b chic, latino, disco</li> 
        <li class="pass-label">pass</li>    </ul> 
         <a href="/club/paris/10/duplex" title="duplex"><img src="/img/salles/resize/50/10.jpg" alt="duplex" class="flysalle"></a> 
       <hr class="clearleft"> 
     </div> 

でFIESTAエラスムス留守/イベント/ 83318は、私はこの

$PATTERN = "/\<div id="tab-soiree".*<a href="/event/(.*)/">(.*)</a>/" 
preg_match($PATTERN, $html, $matches); 

のようなものをテストしたが、それは動作しません。

+1

[正規表現を使ってHTMLを解析することはできません](http://stackoverflow.com/a/1732454/1185355)代わりにDOMパーサーを使用してください:) – Daan

答えて

1

:あなたのHTMLは$htmlという名前の変数からアクセス可能であると仮定すると、http://php.net/manual/en/book.dom.php

:代わりに、組み込みのDOM PHP自体内のツールを解析を使用します(.*?)部分は貪欲でないパターンです。つまり、パーサーは指定された文字列の最後までは移動しませんが、この場合は"の前で停止します。

REGEXを実行する前にhtmlを事前処理しておくこと、つまり、すべての改行を削除して[\s]+部分を削除することもできます。

オンラインで試すことができますhere

+0

あなたは私にアドバイスをしますか?DOMかRegex? – geekInside

+0

ありがとうございます。私は成功します – geekInside

2

HTMLを正規表現で解析しません。

$PATTERN = '%<h2><a href="(.*?)">(.*?)</a>[\s]+</h2>%i'; 
preg_match($PATTERN, $html, $matches); 

:私は、次のパターンを提案

$doc = new DOMDocument(); 
$doc->loadHTML($html); 

$item = $doc->getElementsByTagName("li")->item(0); 
$link = $item->getElementsByTagName("a")->item(0); 

echo $link->attributes->getNamedItem('href')->nodeValue; 
echo $link->textContent; 
+0

ありがとうございます。私はDOMDocumentで試してみます – geekInside

関連する問題