首先给楼主分析一下出错的原因,/<table.*表格二.*<\/table>/is的匹配范围为你这个$c的全部,应当用最小匹配.*?的形式,这是没有写过Perl,直接学PHP的网友经常忽略的问题。
其次,二级嵌套表格基本上不能用一个表达式来匹配内层的表格,需要分步处理,一个简单的方法是利用回调函数,在回调函数再使用最大匹配来保留外层表格。
例如楼主的表达式可以写成:
function do_replace($m)
{
preg_match('/(<table .*)<table /is', $m[0], $match);
return $match[1].'xxxxxxxx';
}
$c=preg_replace_callback('/<table .*?表格二.*?<\/table>/is', 'do_replace', $c);
虽然代码比较简陋防不住二级嵌套(注:要防二级嵌套需重复调用preg_replace_callback这句话两次,依此类推),但应该可以满足楼主的需求。另外,在这里我作为一个从Perl转到PHP的程序员,也希望包括楼主在内的各位学PHP网友有空时能顺便学一下Perl
其次,二级嵌套表格基本上不能用一个表达式来匹配内层的表格,需要分步处理,一个简单的方法是利用回调函数,在回调函数再使用最大匹配来保留外层表格。
例如楼主的表达式可以写成:
function do_replace($m)
{
preg_match('/(<table .*)<table /is', $m[0], $match);
return $match[1].'xxxxxxxx';
}
$c=preg_replace_callback('/<table .*?表格二.*?<\/table>/is', 'do_replace', $c);
虽然代码比较简陋防不住二级嵌套(注:要防二级嵌套需重复调用preg_replace_callback这句话两次,依此类推),但应该可以满足楼主的需求。另外,在这里我作为一个从Perl转到PHP的程序员,也希望包括楼主在内的各位学PHP网友有空时能顺便学一下Perl
解决方案 »
- 请教下是phpeclipse的编译错误吗——明明定义了而且输出了还报警告
- [function.file-put-contents]: failed to open stream: Permission denied in
- 一个html里传递PHP变量的问题
- 关于将"-"字符替换为"'"的问题
- 新手请教:SESSION变量的生存周期???
- mail函数的应用
- 再问一个图片问题!
- mysql server 不能用了,该怎么办?怎么办?怎么办?
- 使用SMTP口发送邮件的代码 (帖一段,向高手求另一段)
- 谈谈判断数组时! 和 !empty() 的区别
- 急!!!Call to a member function on a non-object 错误,哪位帮忙找找错哪了?急呀!!
- 如何在solaris 8下安装apache mysql php
几个strpos就可以了
$c=preg_replace("/(<table.*?)(<table.*?表格二.*?<\/table>)(.*?<\/table>)/is","$1$3",$c);
大于2个,以此类推
然后从"表格二"往上找"<table ",往下找"</table>"