2012-04-30 167 views
0

我需要提取的話下面的HTML代碼PHP - 從網頁HTML中提取數據

<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 ERASMUS ANS /事件/ 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

我建議以下模式:

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

(.*?)部分是非貪婪模式,這意味着解析器不會一直走到提供的字符串的末尾,但在此情況下將在"之前停止。

您可能還想在REGEX之前預先處理html,即刪除所有換行符以擺脫[\s]+部分。

您可以在線試用here

+0

你有什麼建議我:DOM或Regex? – geekInside

+0

謝謝。我成功 – geekInside

2

你不用正則表達式解析HTML。相反,使用內置在PHP本身DOM解析工具:http://php.net/manual/en/book.dom.php

假設你的HTML可以訪問來自一個名爲$html變量:

$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