推荐使用 读书导航极客导航 :125啦极客导航(http://www.biumall.com/jike.html)
PHP版本升级后preg_replace过期了,虽然都可以用,为了安全考虑,PHP官方推荐使用preg_replace_callback替代。
php手册
(PHP 4 >= 4.0.5, PHP 5, PHP 7) preg-replace-callback
(PHP 4, PHP 5, PHP 7) preg_replace
下面例子摘抄于《preg_replace_callback替换数组问题?》,感谢给力的网友。
最近我也在学习这个,因此摘抄于此记录一下。
$tpl = preg_replace(
['/\s*([,;:\{\}])\s*/', '/[\t\n\r]/', '/\/\*.+?\*\//'],
['\\1', '', ''],
$tpl
);
得到赞同的回答如下
$newText = preg_replace_callback(
'/(.*?)(\s*([,;:\{\}])\s*)(.*?)([\t\n\r])(.*?)(\/\*.+?\*\/)(.*?)/i',
function($match){
$replaceArr = ['\\1', '', ''];
return $match[1].$replaceArr[1].$match[3].$replaceArr[2].$match[5].$replaceArr[3].$match[7];
},
$yourText
);
使用者类似的方式,发现不太对,得不到我想要的结果。
因此另外寻找其他方法。
——————————–正确的方法——————————–
在其他地方,参考外国博客(忘记地址了)参考类似的思路,使用下面的就可以解决preg_replace_callback中使用两个数组preg_replace_callback
$value = array('/\s*([,;:\{\}])\s*/', '/[\t\n\r]/', '/\/\*.+?\*\//');
$replace = array(
function ($matches) {
return $matches[1];
},
function ($matches) {
return "";
},
function ($matches) {
return "";
});
#$content 存放结果
for ($i = 0; $i < count($value); $i++) {
$content = preg_replace_callback($value[$i], $replace[$i], $content);
}
答案只是参考,自己多验证行。
当然如果你的是PHP7以上的,那就更简单了,那就可以使用preg_replace_callback_array这个,这个对于数组更简单
php手册:preg_replace_callback_array
return preg_replace_callback_array(
[
$search[0] => function ($matches) {
return matches[1];
},
$search[1] => function ($matches) {
return "";
},
$search[2] => function ($matches) {
return "";
}
],
$content
);
以上仅供参考,谢谢。
希望读者把 http://www.biumall.com/ 设置为您的主页,多谢
© 版权声明