php - 如何使用preg_replace_callback()改写这个函数?
黄舟
黄舟 2017-04-10 14:44:03
[PHP讨论组]

最近的项目,在更新完PHP以后发现preg_replace()在5.5.0版本起/e修饰符已经被弃用了。然后不知道怎么改写

$source_content = preg_replace($search.'e', "'"
                                       . $this->_quote_replace($this->left_delimiter) . 'php'
                                       . "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
                                       . $this->_quote_replace($this->right_delimiter)
                                       . "'"
                                       , $source_content);

求大神指教

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
怪我咯

preg_replace()/e模式被废弃了,不是preg_replace()被废弃了好么!!请不要以偏概全的说话!!搞得我一开始都吓尿了,还以为PHP特么怎么这么随便呢。

preg_replace_callback()不是很简单么,就是用函数替换了用eval执行字符串啊。不过说老实话没怎么看明白你的替换执行函数到底要干嘛,好像是要根据换行符的个数重新写一遍换行??写个参考给你吧:

$source_content = preg_replace_callback($search, function($matches) {
    return str_repeat("\n", substr_count($matches[0], "\n");
}, $cource_content);

函数的$matches参数就是你的$search匹配得到的结果,如果还是不懂还是看看手册吧,手册上已经写的很全了。

大家讲道理

这里是smarty官方给出的答案:
$source_content = preg_replace_callback($search, create_function ('$matches', "return '"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\$matches[1]', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "';") , $source_content);

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号