2012-08-07 45 views
0

試圖找到所有HTML <表>行與該運營商在PHP所有的HTML錶行,但沒有:查找與正則表達式

preg_match_all("#<tr[^>]*>.*</tr>#", $content, $matches); 

有什麼不對?

+1

[小馬他來...](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – 2012-08-07 13:50:26

+0

[The小馬他來...](http://stackoverflow.com/a/1732454/1338999)不要使用正則表達式來描述HTML! – Matt 2012-08-07 13:50:47

+0

我真的不知道我們是否應該能夠用罐裝'HTML/Regexp'原因來解決問題 – 2012-08-07 13:51:19

回答

3

除非進入複雜的遞歸表達式,否則任何正則表達式都會遇到嵌套表的問題。

試試這個:

$dom = new DOMDocument(); 
$dom->loadHTML($content); 
$matches = $dom->getElementsByTagName("tr"); 
$count = $matches->length; 
+0

如果我想在之後查看標籤之間的HTML,該怎麼辦? – 2012-08-07 14:02:28

+0

由於'$ matches'是一個DOMNodeList,每個節點都有一個屬性'childNodes',它是子節點的另一個DOMNodeList。 – DavidS 2012-08-08 06:10:11

+0

@Kolink嗯,我可能會遇到當我必須解析無效的HTML DOMDocument解析失敗。 – ravisoni 2013-08-30 07:03:49

3

我想你會在PHP HTML parser上獲得更多的成功。

+0

使用https://code.google.com/p/ganon/(Ganon)糊狀物更快,更好。 – ravisoni 2013-08-30 07:04:49

4
preg_match_all ('#<tr[^>]*>(.*?)</tr>#s') 

增加的「S」標誌,這樣它也匹配換行符,問號匹配(懶惰),並且還添加了括號(捕捉組)。