2012-08-16 59 views
1

可能重複:
RegEx match open tags except XHTML self-contained tags
How to parse and process HTML with PHP?正則表達式在PHP,HTML採取

我需要幫助。我有HTML,我需要正則表達式給我表格。只有一張桌子。因爲在這張桌子上放了另一張桌子。 example html:

<table class="results" cellspacing="1" cellpadding="0" border="0" width="100%" align="left"> 
    <tr><td>text</td></tr> 
</table> 
<!-style> 
tr.bg_selected{} 
tr.bg_selected td, tr.bg_checked td { background-color:#ffe9bc !important;} 
</style>**AND ANOTHER TABLE** 

它是我的常客。在那張桌子後面我得到所有桌子。

$regular = "/<table class=\"results\" cellspacing=\"(\d+)\" cellpadding=\"(\d+)\" border=\"(\d+)\" (.*)>(.*)<\/table>\n(.*)<\/style>/s"; 
    preg_match_all($regular,$str, $matches2, PREG_PATTERN_ORDER); 
+0

請閱讀: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except- xhtml-self-contained-tags/1732454#1732454 – 2012-08-16 13:36:40

+2

[The Pony,He Comes ...](http://stackoverflow.com/a/1732454/1338999)* HTML不是一種常規語言,因此不能被解析正則表達式。* – Matt 2012-08-16 13:36:49

+0

@OcuS能否以更具建設性的方式重複該評論? – Matt 2012-08-16 13:39:32

回答

1

有些人在評論中指出「你不能用正則表達式解析HTML」。這不完全準確;可以辦到。

但是,這很困難且容易出錯,並且在最後你會遇到一些混亂的結構。

因此,我強烈建議使用內置HTML解析器的PHP。使用起來非常簡單:

$doc = new DOMDocument(); 
$doc->loadHTML($htmlCode); 

然後,您可以使用生成的對象來提取所需的數據。

$tables = $dom->getElementsByTagName('table'); 
foreach ($tables as $table){ 
    $cells = $table->getElementsByTagName('td'); 
    foreach ($cells as $cell){ 
     echo $cell->nodeValue; 
    } 
} 

查看PHP手冊以獲得更多信息:http://php.net/manual/en/book.dom.php

+0

始終使用DOM!完美的答案。 – 2012-08-16 14:26:41

+0

@IonutFlaviusPogacian - 好吧,也許不是*永遠*,但肯定在任何事情,但最平凡的情況。 – SDC 2012-08-16 14:33:58