<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);

解决方案 »

  1.   

    <?php
    $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);
    ?>
      

  2.   

    原来我没有说清楚,最外层的大表格,被嵌套的那个t2表如果很困难就算了
    第一个表
    <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> 
      

  3.   

    提取每个table的全部内容。
      

  4.   

    /<table.*?id=(.+)?>/ 这样试试
      

  5.   

    / <table.*?id=(.+)?>(.*)?<\/table> /
      

  6.   

    myvicy
    你的正则和我那个一样,在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>
            ))
      

  7.   

     <table.*?id=([\s\S]*)([\s\S]*)<\/table>这样试试
      

  8.   

    ((<table)([\s\S]*?))(<\/table>(?!</\td>))这样?好像可以了...
      

  9.   


    再纠正一下,上面的如果碰上</td>前有空格就SB了,这个比较好点.
    ((<table)([\s\S]*?))(<\/table>(?!(\s*<\/td>)))
      

  10.   

    另外,如果表格这么嵌套
    <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> 这样的话就更难判断了...