沙盘引擎正则抒发式调剂小技巧
很久没有遇上PHP难点了,这次正则成绩占了小半工夫,还是老成绩最大回溯、递归制约成绩。进修透以后实在并没有难修正调剂有这类成绩的正则。次要是以次多少点。基于正则抒发式交换的沙盘引擎很简单遇上正则抒发式最大回溯/递归的制约。
惰性婚配并没有可怜,畸形状况下沙盘并没有会没有够用,常常没有会超过制约,discuz的沙盘引擎就少量运用了。然而因而而没有离开意、没有去进修,则简单书写谬误并遇上成绩。
当preg_*前往的是null的时分则要留意了,判别因变量是is_null.
出错并没有可怜,然而最好把谬误都完好的输入,那样调剂就很简单了。
除非输入出错缘由,还要输入婚配的文本和运用的正则,那样就很简单调剂了。
PHP代码
if(is_null($tmp)){
$error_code=preg_last_error();
switch($error_code){
casePREG_NO_ERROR:
echo\'PREG_NO_ERROR\';
break;
casePREG_INTERNAL_ERROR:
echo\'PREG_INTERNAL_ERROR\';
break;
casePREG_BACKTRACK_LIMIT_ERROR:
echo\'PREG_BACKTRACK_LIMIT_ERROR\';
break;
casePREG_RECURSION_LIMIT_ERROR:
echo\'PREG_RECURSION_LIMIT_ERROR\';
break;
casePREG_BAD_UTF8_ERROR:
echo\'PREG_BAD_UTF8_ERROR\';
break;
casePREG_BAD_UTF8_OFFSET_ERROR:
echo\'PREG_BAD_UTF8_OFFSET_ERROR\';
break;
default:
echo\'UNKNOWERROR\';
exit;
}
参考材料
1、2010, Laruence 《深悉正则(pcre)最大回溯/递归制约》
2、2011, PHP中文画册 preg_last_error
} 这个分享太实用了,刚好能用到,感谢楼主! 这个思路很新颖,打开了新世界的大门,谢谢分享 楼主太厉害了,整理得这么详细,必须支持
页:
[1]