[英]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.