正则表达式 - 从PHP中的html字符串中获取表

时间:2014-07-31 08:10:14

标签: php html regex html-table html-parsing

我尝试使用特殊的div容器将所有表包装在我的内容中,以使它们可用于移动设备。 在将表保存在自定义CSS的数据库中之前,我无法将表包装起来。我设法在页面上打印之前找到了内容,我需要preg_replace那里的所有表格。

我这样做,以获得所有表格:

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

问题是让内部部分(?:.|\n)*匹配标记内的所有内容,而不匹配结束标记。现在,表达式匹配所有内容,甚至表格的结束标记......

有没有办法排除结束标记的匹配?

2 个答案:

答案 0 :(得分:6)

您需要执行非贪婪匹配:/(<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(如您所知),它绝对是更好的解决方案。

答案 1 :(得分:0)

如果您不想匹配结束标记,可以使用前瞻

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