2012-12-13 41 views
0

我使用下面的PHP腳本來解析表格。使用preg_match_all與PHP解析一個html表格

它的工作原理,如果每一個元素是在同一行,例如:

<td></td> 
<td></td> 
<td></td> 

我怎樣才能讓如果「開始標記」和「關閉標籤」都在不同的行工作的呢?像這樣:

<td></td> 
<td> 
</td> 
<td></td> 

PHP腳本:

function parseTable($html) 
{ 
    // Find the table 
    preg_match("/<table.*?>.*?<\/[\s]*table>/s", $html, $table_html); 

    // Get title for each row 
    preg_match_all("/<th.*?>(.*?)<\/[\s]*th>/", $table_html[0], $matches); 
    $row_headers = $matches[1]; 

    // Iterate each row 
    preg_match_all("/<tr.*?>(.*?)<\/[\s]*tr>/s", $table_html[0], $matches); 

    $table = array(); 

    foreach($matches[1] as $row_html) 
    { 
    preg_match_all("/<td.*?>(.*?)<\/[\s]*td>/", $row_html, $td_matches); 
    $row = array(); 
    for($i=0; $i<count($td_matches[1]); $i++) 
    { 
     $td = strip_tags(html_entity_decode($td_matches[1][$i])); 
     $row[$row_headers[$i]] = $td; 
    } 

    if(count($row) > 0) 
     $table[] = $row; 
    } 
    return $table; 
} 
+5

[不要使用分析HTML正則表達式(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) –

+0

感謝您指出這一點... – user1087110

+0

's'標誌將幫助您,然而,正則表達式可能是最強大的談到HTML或XML解析時,要走的路。 – inhan

回答

2

的preg_match不進行解析HTML,因爲它不是一個正則表達式。最好的解決辦法是使用

XML Parser - PHP Doc

每個工具都有其解決的問題和分析是不是的preg_match的一個