2012-10-17 268 views
-2

可能重複,以提取特定數據:
How to parse and process HTML with PHP?如何使用的preg_match()使用PHP

問題:

僅提取第一< UL類=」使用preg_match從網頁列出「> </ul>並將其轉儲到數組中。

代碼:

$str = file_get_contents('http://www.domain.com'); 
preg_match('#<ul class="list">(.*)</ul>#i', $str, $matches); 

預期目標:

爲了得到第< UL>和轉儲這一切在數組中。 < ul>應該是家長,裏面的每個元素都應該是孩子。

回答

0

preg_match是一個字符串操作函數,對「子元素」一無所知,所以永遠無法返回您希望的數組。

您需要使用能夠爲您解析HTML的庫,例如Simple HTML DOM或內置DOM庫的loadHTML method

[編輯 - 「永不」上面是有點誇張:你可以,有一點努力,只是用普通preg_match寫自己的微型解析器,但是比起使用這將是不靈活,難以維護HTML解析庫。]

0
$str = file_get_contents('http://www.domain.com'); 
preg_match('~<ul class="list">(.*?)</ul>~si', $str, $matches); 

使用。 ?匹配第一個和最接近的結束標記。如果你使用。它會在頁面上找到第一個。我假設你的UL標籤是正確的。

您還需要SI標誌S =單線I =不敏感
否則您的模式首先被打破\ n。

PS如果UL包含UL孩子,你應該考慮使用DOM文檔DOMXPath查詢解析。對於更復雜的HTML更安全。

希望它有幫助。

0

你想使用。或者如果有幾個,你可以獲得更多的第一個ul。

preg_match('/<ul class="list">(.+?)<\/ul>/mis', $str, $match); 

preg_match_all('/<li>(.+?)<\/li>/mis', $match[1], $lis); 

$answer = array ('ul' => $lis[1]); 

我認爲這是你要找的