被匹配的字符串
<tr bgcolor="white" width="100%" height="30"> <td style="text-align: center;" bgcolor="#ebe9e4" height="24">12000元 </td> </tr><tr bgcolor="white" width="90%"> <td colspan="4" height="24"> <div style="text-align: right;"> <span style="color: rgb(0, 0, 0);">信息采集;09-11-13 制表: </span> <a target="_blank" href=" http://www.xxx.com.cn/"> 某某</a></div> </td> </tr> <tr bgcolor="white" width="80%"> <td style="text-align: center;">某某 </td></tr>匹配说明.
1 匹配<tr>....</tr>之间的内容
2 <tr>与</tr>之间包含有 "采集" 2个汉字
3 <tr>与</tr> 不能再次出现<tr> 或者 </tr>标签要求的结果是
<tr bgcolor="white" width="90%"> <td colspan="4" height="24"> <div style="text-align: right;"> <span style="color: rgb(0, 0, 0);">信息采集;09-11-13 制表: </span> <a target="_blank" href=" http://www.xxx.com.cn/"> 某某</a></div> </td> </tr>我写的正则是
/<tr.*?>.*?采集.+?<\/tr>/s
但这样匹配结果包含了第一行tr
<tr bgcolor="white" width="100%" height="30"> <td style="text-align: center;" bgcolor="#ebe9e4" height="24">12000元 </td> </tr><tr bgcolor="white" width="90%"> <td colspan="4" height="24"> <div style="text-align: right;"> <span style="color: rgb(0, 0, 0);">信息采集;09-11-13 制表: </span> <a target="_blank" href=" http://www.xxx.com.cn/"> 某某</a></div> </td> </tr> <tr bgcolor="white" width="80%"> <td style="text-align: center;">某某 </td></tr>匹配说明.
1 匹配<tr>....</tr>之间的内容
2 <tr>与</tr>之间包含有 "采集" 2个汉字
3 <tr>与</tr> 不能再次出现<tr> 或者 </tr>标签要求的结果是
<tr bgcolor="white" width="90%"> <td colspan="4" height="24"> <div style="text-align: right;"> <span style="color: rgb(0, 0, 0);">信息采集;09-11-13 制表: </span> <a target="_blank" href=" http://www.xxx.com.cn/"> 某某</a></div> </td> </tr>我写的正则是
/<tr.*?>.*?采集.+?<\/tr>/s
但这样匹配结果包含了第一行tr
$text = <<< HTML
<tr bgcolor="white" width="100%" height="30"> <td style="text-align: center;" bgcolor="#ebe9e4" height="24">12000元 </td> </tr> <tr bgcolor="white" width="90%"> <td colspan="4" height="24"> <div style="text-align: right;"> <span style="color: rgb(0, 0, 0);">信息采集;09-11-13 制表: </span> <a target="_blank" href=" http://www.xxx.com.cn/"> 某某 </a> </div> </td> </tr> <tr bgcolor="white" width="80%"> <td style="text-align: center;">某某 </td> </tr>
HTML;$p = "/ <tr.*?>.*?采集.+? <\/tr>/s";
preg_match_all($p, $text, $reg);
print_r($reg);Array
(
[0] => Array
(
[0] => <tr bgcolor="white" width="90%"> <td colspan="4" height="24"> <div style="text-align: right;"> <span style="color: rgb(0, 0, 0);">信息采集;09-11-13 制表: </span> <a target="_blank" href=" http://www.xxx.com.cn/"> 某某 </a> </div> </td> </tr>
))
<tr bgcolor="white" width="100%" height="30">
<td style="text-align: center;" bgcolor="#ebe9e4" height="24">12000元 </td>
</tr>
<tr bgcolor="white" width="90%">
<td colspan="4" height="24">
<div style="text-align: right;">
<span style="color: rgb(0, 0, 0);">信息采集;09-11-13 制表: </span>
<a target="_blank" href=" http://www.xxx.com.cn/"> 某某</a>
</div>
</td>
</tr>
<tr bgcolor="white" width="80%">
<td style="text-align: center;">某某 </td>
</tr>';[color=#0000FF]匹配说明.
1 匹配 <tr>.... </tr>之间的内容
2 <tr>与 </tr>之间包含有 "采集" 2个汉字
3 <tr>与 </tr> 不能再次出现 <tr> 或者 </tr>标签 preg_match('/<tr.*?>.*?采集.+?<\/tr>/s',$str,$out);[/color]一楼的+了空格.但实际上是并没有空格的.这里重新来过
preg_match_all($p, $text, $reg);
echo $reg[1];
你这个我给你举个例子吧<tr><td>1></td></tr><tr><td>5555采集5555</td></tr><tr><td>3</td></tr>
按照你个的正则,或者我原有的/<tr.*?>.*?采集.+?<\/tr>/s
这样匹配的结果会是
<tr><td>1></td></tr><tr><td>5555采集5555</td></tr>
吧第一行也包含了.因为.*?采集 这里的.*?这个代表了任意字符,同时也包含了<tr></tr>标签
2: .在perl正则中能代表换行取决于修饰符号
<tr bgcolor="white" width="100%" height="30">
<td style="text-align: center;" bgcolor="#ebe9e4" height="24">12000元 </td>
</tr><tr bgcolor="white" width="90%">
<td colspan="4" height="24">
<div style="text-align: right;">
<span style="color: rgb(0, 0, 0);">信息采集;09-11-13 制表: </span>
<a target="_blank" href=" http://www.xxx.com.cn/"> 某某</a>
</div>
</td>
</tr><tr bgcolor="white" width="80%">
<td style="text-align: center;">某某 </td>
</tr>';
function test($matches)
{
if(strpos($matches[0], "采集"))
{
return $matches[0];
}
}
echo preg_replace_callback("/<tr[^\>]+>.*?<\/tr>/s","test", $str);