2011-09-12 44 views
0

項目我有多個項目在表中,此格式使用preg_match_all擺脫HTML

<td class="product highlighted"> 
Item Name 
</td> 

,我使用下面的PHP代碼

$regex_pattern = "/<td class=\"product highlighted\">(.*)<\/td>/"; 
preg_match_all($regex_pattern,$buffer,$matches); 
print_r($matches); 

我沒有得到任何輸出,但我可以看到HTML中的項目。

我的正則表達式有什麼問題嗎?

+0

我聞到類似的東西已經被多次詢問......。請使用搜索。 – hakre

+0

例如[如何使用正則表達式來匹配換行符](http://stackoverflow.com/questions/1985941/how-to-make-dot-match-newline-characters-using-regular-expressions) – mercator

回答

6

除了使用正則表達式來解析HTML,是的,有一些錯誤:點不符合換行符。

所以你需要使用

$regex_pattern = "/<td class=\"product highlighted\">(.*?)<\/td>/s"; 

/s修改允許點匹配任何字符,包括換行。請注意不情願量詞.*?以避免一次匹配多個標籤。

+0

@ user813813僅供參考,請參閱有關[PHP正則表達式語法中的點](http://www.php.net/manual/en/regexp.reference.dot.php)和[模式修飾符](http://www.php達網絡/手動/ EN/reference.pcre.pattern.modifiers.php)。 – mercator

3

爲了搭配你的榜樣,你將需要添加點所有標誌,s,所以.將匹配換行符。

請嘗試以下操作。

$regex_pattern = "/<td class=\"product highlighted\">(.*?)<\/td>/s"; 

另請注意,我將捕獲更改爲非貪婪,(.*?)。匹配開放式文本時最好這樣做。

值得注意的是,正則表達式不是HTML解析的正確工具,您應該查看DOMDocument。然而,對於這種簡單的匹配,只要HTML格式正確,就可以使用正則表達式來獲得。