由于PHP正则表达示学得没到家,在使用PHP做网页内容采集时经常遇到一个问题。

问题描述:

假设网页内容如下:

<table>
<tr>
    <td></td>
    <td></td>
</tr>
<tr>
    <td></td>
    <td></td>
</tr>
</table>

我要匹配的是每一个<tr></tr>之间的内容(当然tr里面有很多内容,这里没有列出来),暂时不考虑tr会嵌套的问题。

首先想到的正则是这样写的:

preg_match_all( '/<tr[^>]*(.*?)<\/tr>/i', $string, $matches );
echo "<pre>";
print_r( $matches);
echo '</pre>';

但运行不了,经网上搜寻资料后改成如下写法后即可:

preg_match_all( '/<tr[^>]*([\s\S]*?)<\/tr>/i', $string, $matches );
echo "<pre>";
print_r( $matches);
echo '</pre>';

理由很简单,回头复习一上正则表达示中【.】、【\s】和【\S】就知道了。

posted on 2014-10-07 21:13  demin7926  阅读(2558)  评论(0编辑  收藏  举报