2013-07-02 84 views
-1

我使用cURL從網站獲取部分內容。我沒有問題與文本是在一行,但如果有更多的行包含標籤,空格。函數preg_match返回null。
這裏是我的代碼:如何獲取標籤之間的大文本

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, "example.com"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    curl_close($ch); 

    $pattern = '#<div class="class-name">([^\n]+.*?)</div>#'; 
    preg_match($pattern, $output, $matches); 

    var_dump($matches); 

我在http://gskinner.com/RegExr/檢查這種模式,它應該工作,但正如我之前所說的preg_match返回null。 任何想法可能是什麼原因?我想獲得的一切(包括空格,其他標籤),這是

+1

不用正則表達式解析html – 2013-07-02 08:44:01

+0

您需要使用正則表達式的's'修飾符來使'。*'跨越多行。 – Barmar

回答

2

這是因爲.*?原因回溯,這是由pcre.backtrack_limit

侷限於這將是更明智的使用DOMDocument或任何其他HTML這個標籤之間解析器來查找所需的一段數據。

$dom = new DOMDocument; 
$dom->loadHTML($html); 
$xpath = new DOMXPath($dom); 

$elements = $xpath->query('//div[contains(concat(" ", @class, " "), " class-name ")]'); 

foreach ($elements as $element) { 
    echo $element->nodeValue; 
} 
+0

謝謝傑克,它現在有效 – user1409508