<?php
$str=<<<E
<tr>
<tr><td id="data">A</td></tr>
<td head="data">a</td>
<td head="data">b</td>
</tr>
//----------第一部分分割符------------
<tr>
<tr><td id="data">B</td></tr>
<td head="data">a1</td>
<td head="data">b2</td>
</tr>
<tr>
<td head="data">a2</td>
<td head="data">b2</td>
</tr>
<tr>
<td head="data">a3</td>
<td head="data">b3</td>
</tr>
<tr>
<td head="data">a4</td>
<td head="data">b4</td>
</tr>
//------------第二部分分割--------
<tr>
<tr><td id="data">C</td></tr>
<td head="data">a5</td>
<td head="data">b5</td>
</tr>
<tr>
<td head="data">a6</td>
<td head="data">b6</td>
</tr>
<tr>
<td head="data">a7</td>
<td head="data">b7</td>
</tr>
E;
$p='#
<tr>\s*
<tr>\s*
<td \s* id="data">([^<>]*)</td>\s*
</tr>\s*
<td [^<>]*>([^<>]*)</td>\s*
<td [^<>]*>([^<>]*)</td>\s*
</tr>\s*
(?:<tr>\s*
<td [^<>]*>([^<>]*)</td>\s*
<td [^<>]*>([^<>]*)</td>\s*
</tr>\s*){0,}#xs';
preg_match_all($p, $str, $re);
print_r($re);