Php 预匹配提取表内容

Php 预匹配提取表内容,php,preg-match,Php,Preg Match,嗨,我在一个旧项目中遇到了一个错误,该项目使用cURL和preg match来获取表内容。 这是循环的一部分。因此,最好使用preg_match来适应旧代码。 我在提取内容时遇到问题。 列数为12,但无法提取。 请帮忙 谢谢 HTML: <table><tr> //looping rows <td align="center"><input type='checkbox' name="arr[]" value="17700002186"><

嗨,我在一个旧项目中遇到了一个错误,该项目使用cURL和preg match来获取表内容。
这是循环的一部分。因此,最好使用preg_match来适应旧代码。 我在提取内容时遇到问题。 列数为12,但无法提取。 请帮忙

谢谢

HTML:

 <table><tr>
//looping rows
<td align="center"><input type='checkbox' name="arr[]" value="17700002186"></td>
<input type='hidden' name="table_rg_17700002186" value="rg">
<input type='hidden' name="rg_id_17700002186" value="17700002186">
<input type='hidden' name="rg_uid_17700002186" value="18000174">
<input type='hidden' name="rg_date_17700002186" value="2014-08-22 12:11:37">
<td align="left">1 </td>
<td>ADMIN1 </td>
<td>2014-08-22 12:11:37</td>
<td> <a href="javascript:void(0);" onclick="window.open('http://www.testing.net/rg/popup/1/ADMIN1/1','','toolbar=1,status=1,location=1,scrollbars=1,resizable=1,width=1000,height=500,left='+(screen.availWidth/2-500)+',top='+(screen.availHeight/2-250)+'');"> Rgst </a></td>
<td>TESTING</td>
<td>BA</td>
<td>From : TESTING_<BR>
To: TEST1<BR>(873-021-0435,22-08-2014) </td>
<td align="right" style="padding-right:20px;">251,515</td>
<td align="right" style="padding-right:20px;"> 251515</td>
<td align="right" style="padding-right:20px;">0</td>
<td><textarea wrap="VIRTUAL" name="keter_17700002186" cols="10" row="2"></textarea></td>

// end of looped rows    
</tr>
//---------UPDATED HTML:-------------
<tr>
<td colspan="4" align=right>
<input type="submit" class="button" value="Accept" name="sbm"/></td>
<td colspan="4" align=right>
<input type="submit" class="button" value="Reject" name="sbm"/></td>
<td colspan="4">
<input type="submit" class="button" value="Delete" name="sbm"/>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="12">
<div style="float:right;"></div>
Total Record: <b>1</b>
</td>
</tr>
</tfoot>
 </table>
//---------UPDATED HTML:-------------
preg_match('/\
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
/simU',$html,$matches);

var_dump($matches); //array{}

//循环行
1.
管理员1
2014-08-22 12:11:37
测试
文学士
来自:测试
致:试验1
(873-021-0435,22-08-2014) 251,515 251515 0 //循环行的结尾 //---------更新的HTML:------------- 总记录:1 //---------更新的HTML:-------------
预匹配:

 <table><tr>
//looping rows
<td align="center"><input type='checkbox' name="arr[]" value="17700002186"></td>
<input type='hidden' name="table_rg_17700002186" value="rg">
<input type='hidden' name="rg_id_17700002186" value="17700002186">
<input type='hidden' name="rg_uid_17700002186" value="18000174">
<input type='hidden' name="rg_date_17700002186" value="2014-08-22 12:11:37">
<td align="left">1 </td>
<td>ADMIN1 </td>
<td>2014-08-22 12:11:37</td>
<td> <a href="javascript:void(0);" onclick="window.open('http://www.testing.net/rg/popup/1/ADMIN1/1','','toolbar=1,status=1,location=1,scrollbars=1,resizable=1,width=1000,height=500,left='+(screen.availWidth/2-500)+',top='+(screen.availHeight/2-250)+'');"> Rgst </a></td>
<td>TESTING</td>
<td>BA</td>
<td>From : TESTING_<BR>
To: TEST1<BR>(873-021-0435,22-08-2014) </td>
<td align="right" style="padding-right:20px;">251,515</td>
<td align="right" style="padding-right:20px;"> 251515</td>
<td align="right" style="padding-right:20px;">0</td>
<td><textarea wrap="VIRTUAL" name="keter_17700002186" cols="10" row="2"></textarea></td>

// end of looped rows    
</tr>
//---------UPDATED HTML:-------------
<tr>
<td colspan="4" align=right>
<input type="submit" class="button" value="Accept" name="sbm"/></td>
<td colspan="4" align=right>
<input type="submit" class="button" value="Reject" name="sbm"/></td>
<td colspan="4">
<input type="submit" class="button" value="Delete" name="sbm"/>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="12">
<div style="float:right;"></div>
Total Record: <b>1</b>
</td>
</tr>
</tfoot>
 </table>
//---------UPDATED HTML:-------------
preg_match('/\
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
.*\<td(.*)<\/td>
/simU',$html,$matches);

var_dump($matches); //array{}
preg_匹配('/\

.*\我建议使用
DOMDocument
进行以下操作:

例如:

// ...
$dom = new DOMDocument;
$dom->loadHTML($html);
$cells = $dom->getElementsByTagName('td');
foreach ($cells as $cell) {
    echo $cell->nodeValue, PHP_EOL;
}
?>

删除正则表达式中的新行尝试以下操作

preg_match('/\.*\<td(.*)<\/td>.*\<td(.*)<\/td>.*\<td(.*)<\/td>.*\<td(.*)<\/td>.*\<td(.*)<\/td>.*\<td(.*)<\/td>.*\<td(.*)<\/td>.*\<td(.*)<\/td>.*\<td(.*)<\/td>.*\<td(.*)<\/td>.*\<td(.*)<\/td>.*\<td(.*)<\/td>/simU',$html,$matches);

var_dump($matches);

preg\u match('/\.\您可以将
preg\u split
array\u slice
结合使用:

$a_cells = array_slice(preg_split('/(?:<\/td>\s*|)<td[^>]*>/iu', $text), 1);
$a_cells=array_slice(preg_split('/(?:\s*|))*>/iu',$text),1);

我遵循这个关于正则表达式和HTML的著名答案,这是一个循环的一部分,因此为了适应旧代码,我需要使用preg_match。否则会有很多变化。这很好!我不必计算列数。很好,但它包括了位于列表最后一行的输入按钮table@xyonme我不明白,怎么了“最后一行”?HTML仅包含单元格(列),不是行。是的,你是对的!你的问题适用于我的问题。在我的代码中,有一个循环,这个问题只是循环的一部分。有一行包含按钮。因为preg match与模式匹配,所以它只选择表中的内容,而忽略那些与模式不匹配的行。@xyome所以你必须des抄写您的实际问题,并将所有相关代码发布在question@xyonme这不是有效的HTML,它有未打开的
tr
标记。此外,还不清楚您想要得到什么。请将所需结果添加到问题中