魏长东

weichangdong

preg_replace的/e模式的替换

到了php5.5不支持preg_replace后面加/e的模式了。如这种

$str = preg_replace("/\{(\\$[a-zA-Z0-9_\[\]\'\"\$\x7f-\xff]+)\}/es", 
"\$this->addquote('<?php echo \\1;?>')",$str);

后报错的。

可以用这个preg_replace_callback函数替换。

附上preg_replace_callback函数的用法实例。

$str='HELLO';
$s=preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str);
echo $s;
$s=preg_replace_callback("/([A-Z])/",'wcd', $str);  
function wcd($match) {  
    return  '_'.strtolower($match[1]);  
}  
echo $s;
//以上程序,在php5.5以下版本输出是一样的。但是在大雨等于5.5版本就会报错。

如果是对象中使用,这么使用:

preg_replace_callback("/([A-Z])/",array($this,'wcd'), $str);