<table id=t1>
<tr>
<td>
<table id=t2>
<tr>
<td>
</td>
<td>
</table>
</td>
<td>
</td>
</tr>
</table>
<table id=t3>
<tr>
<td>
</td>
<td>
</table>如何使用正则完整提取t1,t2,t3
如下正则有缺陷:
preg_match_all('%<table[\s>].*?</table>%is', $html, $matches);
<tr>
<td>
<table id=t2>
<tr>
<td>
</td>
<td>
</table>
</td>
<td>
</td>
</tr>
</table>
<table id=t3>
<tr>
<td>
</td>
<td>
</table>如何使用正则完整提取t1,t2,t3
如下正则有缺陷:
preg_match_all('%<table[\s>].*?</table>%is', $html, $matches);
$html =<<<EOF
<table id=t1>
<tr>
<td>
<table id=t2>
<tr>
<td>
</td>
<td>
</table>
</td>
<td>
</td>
</tr>
</table>
<table id=t3>
<tr>
<td>
</td>
<td>
</table>
EOF;
preg_match_all("/<table.+id=(.+[0-9])/",$html,$matches);
print_r($matches);
?>
第一个表
<table id=t1>
<tr>
<td>
<table id=t2>
<tr>
<td>
</td>
<td>
</table>
</td>
<td>
</td>
</tr>
</table>
第二个表
<table id=t3>
<tr>
<td>
</td>
<td>
</table>
你的正则和我那个一样,在table出现嵌套的时候,没有能完全的得出整个表格。
Array
(
[0] => Array
(
[0] => <table border="1" id="t01">
<tbody>
<tr>
<td>
<table border="1" id="t0101">
<tbody>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
[1] => <table border="1" id="t0102">
<tbody>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
[2] => <table border="1" id="t02">
<tbody>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
))
再纠正一下,上面的如果碰上</td>前有空格就SB了,这个比较好点.
((<table)([\s\S]*?))(<\/table>(?!(\s*<\/td>)))
<table id=t1>
<tr>
<td>
<table id=t2>
<tr>
<td>
</td>
<td>
</table>
这里再有任意个字符,但不是另一个表格,也不全是空格
</td>
<td>
</td>
</tr>
</table>
<table id=t3>
<tr>
<td>
</td>
<td>
</table> 这样的话就更难判断了...