2011-11-22 45 views
1

我想捕獲文本「捕獲這個」在$字符串下面。正則表達式捕獲組與PHP preg_match不返回值

$string = "</th><td>Capture This</td>"; 
$pattern = "/<\/th>\r.*<td>(.*)<\/td>$/"; 

preg_match ($pattern, $string, $matches); 

echo($matches); 

但是,那只是返回「數組」。我也嘗試使用print_r打印$匹配,但是這給了我「Array()」。

這種模式只會出現一次,所以我只需要它匹配一次。有人可以告訴我我做錯了什麼嗎?

+5

'有人能告訴我我在做什麼wrong'你試圖用正則表達式來解析HTML。 :) – PeeHaa

+0

https://stackoverflow.com/a/1732454/278739 – Cedric

回答

2

問題是您需要CR字符\r。你也應該在搜索組內搜索懶惰,並使用print_r來輸出數組。就像這樣:

$pattern = "/<\/th>.*<td>(.*?)<\/td>$/"; 

你可以看到它在這裏的行動:http://codepad.viper-7.com/djRJ0e

注意它的建議來解析一個適當的HTML解析器HTML而不是使用正則表達式。

+0

非常感謝,馬庫斯。你能建議一個HTML解析器,這對於這樣一個簡單的情況是最好的嗎?你會推薦一個特定的庫,還是應該使用PHP的DOM功能? – hhwhy

+0

@ bow-viper1這可能會使一些光線:http://stackoverflow.com/questions/3577641/best-methods-to-parse-html-with-php/3577662#3577662和http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php – Marcus

+0

我實際上更喜歡使用PHP的DOM函數,但是我只是無法找到任何可以捕獲許多沒有的標記的函數分配給他們的ID或類別。但是,我會繼續看,現在我明白,它被看作是以這種方式使用正則表達式。 – hhwhy

1

兩件事情:

  1. 你需要從你的正則表達式刪除\r,因爲在你輸入的字符串沒有回車符。

  2. 變化echo($matches)print_r($matches)var_dump($matches)