2010-05-22 108 views
0

我試圖從http://www.auctionarms.com/search/displayitem.cfm?itemnum=9736364&oh=216543中提取「Florida(FL)」。 我的代碼是preg_match,regexp,php,從html中提取文本

 
//get location 
    $pattern = "/(State)</i>:</td>(.*)</td>/"; 
    preg_match_all($pattern, $htmlContent, $matches); 
    print_r($matches); 
任何想法爲什麼不工作?

+0

這似乎是SO的不變口頭禪:避免使用正則表達式來解析html,如果可能的話。它不是工作的工具。 – 2010-05-22 04:20:31

回答

0

我相信是因爲你想匹配的字符串在下一行。你將需要啓用多行模式:

$pattern = "/\(State\)<\/i>\:<\/td>(.*)<\/td>/m"; 

但要記住:在嘗試用正則表達式解析HTML,使邪惡的孩子哭處女的血。請參閱:

RegEx match open tags except XHTML self-contained tags

1

當你在一個正則表達式有(State),它將術語State輸入字符串作爲小組賽,也不會在輸入文字相匹配括號 - 你需要逃脫他們與您的/ s - /\(State\)<\/...一樣。

然後就是那還有很多空白的解決該問題(包括新線 - 你需要包括m修改),並沒有包括在正則表達式周圍的頭一個<b/>標籤,該標籤你似乎。即使您解決了這些問題,您也非常依賴您正在抓取的網站所使用的確切標記。這是嘗試使用正則表達式解析HTML時遇到的一般問題。使用HTML解析器會更好(例如,創建一個新的DOMDocument並調用其方法loadhtml)。

+0

我在建議HTML解析器,但在看了網頁後,我改變了主意......沒有課,沒有ID,沒有CSS;很難找到State這個詞。 – 2010-05-22 05:46:25