2012-04-30 122 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