2010-05-09 75 views
1

仍然在正則表達式! ;-)))php - 正則表達式 - 捕獲多個標籤內的字符串

假設我們有一個具有相同結構的很多<tr>行的html文件,其中(.*?)是我需要提取的內容!

<tr align=center><th width=5%><a OnClick="(.*?)"href=#>(.*?)</a><td width=5%>(.*?)<td width=5% align=center >(.*?)</td></tr> 

修訂

也許有一個很好preg_match_all()

我需要的是這樣的結果

match[0] . match[1] . match[2] . match[3] 

以防萬一有人不需要成才的相似!

的解我的小問題是

/<a\s*OnClick=\"(.*?)\"href=#>(.*?)<\/a><td[^>]+>(.*?)<td[^>]+>(.*?)<\/td><\/tr>/m

感謝的時候了!

Luca Filosofi!

+2

有什麼問題? – nc3b 2010-05-09 19:51:34

+0

請告訴我你不是問如何用正則表達式解析html ...惡魔會來... – prodigitalson 2010-05-09 19:53:08

+1

哦,很好。沒有人在一週內與這個問題掛鉤,我幾乎忘了它。 (/等待...) – Kobi 2010-05-09 19:53:16

回答

0

這裏瘋狂猜測沒有實際的樣本數據來匹配正則表達式 - 也很不滿意在這裏使用正則表達式。除非你的桌子看起來完全一樣,否則我懷疑你會對正則表達式有很多樂趣。

反正,所有的警告放在一邊,這可能工作:

<tr[^>]+><th[^>]+><a OnClick="([^"]+)"\s*href="([^"]+)">([^<]+)</a><td[^>]+>([^<]+)<td[^>]+>([^<]+)</td></tr> 

它期望的是順序標記(和<a>標籤中的屬性),帶引號的字符串內沒有尖括號,沒有逃脫報價在引用的字符串等等等等(所有這些事情,如果你使用解析器,你不必擔心)。

在PHP:

preg_match_all('%<tr[^>]+><th[^>]+><a OnClick="([^"]+)"\s*href="([^"]+)">([^<]+)</a><td[^>]+>([^<]+)<td[^>]+>([^<]+)</td></tr>%', $subject, $result, PREG_PATTERN_ORDER); 

$result然後是陣列,其中$result[0]包含整個比賽,$result[1]包含捕獲組沒有。 1等

+0

不完全是,我在找什麼......但它幫助了我很多! PS:我在這裏學習正則表達式,通過提問和一步一步來學習! ;-) 再次感謝! (。*?) ] +>(。*?)] +>(。*?)<\/td><\/tr>' 2010-05-09 21:49:59