簡體   English   中英

正則表達式-從PHP中的html字符串獲取表

[英]Regular Expression - get tables from html string in PHP

我嘗試使用特殊的div容器將所有表包裝在內容中,以使其可用於移動設備。 在將表保存到自定義CSS的數據庫中之前,我無法對其進行包裝。 在將內容打印在頁面上之前,我設法找到了內容,並且需要preg_replace所有表。

我這樣做是為了獲取所有表:

preg_match_all('/(<table[^>]*>(?:.|\n)*<\/table>)/', $aFile['sContent'], $aMatches);

問題是要獲取內部部分(?:.|\\n)*以匹配標簽內部的所有內容,而不匹配結尾標簽。 現在,表達式匹配所有內容,甚至是表的結束標記...

有沒有一種方法可以排除結尾標記的匹配項?

您需要執行非貪婪匹配:/(< /(<table[^>]*>(?:.|\\n)*?<\\/table>)/ ?:.| /(<table[^>]*>(?:.|\\n)*?<\\/table>)/ 注意問號: ?

但是,我將為此使用DOM解析器:

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

$tables = $doc->getElementsByTagName('table');
foreach($tables as $table) {
    $content = $doc->saveHTML($table); 
}

盡管使用DOM解析器從HTML文檔中提取數據已經更加方便了,但是如果您試圖修改HTML(如您所述),則絕對是更好的解決方案。

如果您不想匹配結束標簽,可以使用超前模式,

preg_match_all('/(<table[^>]*>(?:.|\n)*(?=<\/table>))/', $aFile['sContent'], $aMatches);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM