如何使用preg_replace_callback()改写这个函数?
/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);
求大神指教
回复内容:
最近的项目,在更新完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);
求大神指教
是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);
推荐阅读
-
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
-
如何利用分析函数改写范围判断自关联查询详解
-
解析SQL2005中如何使用CLR函数获取行号
-
从零学jquery之如何使用回调函数
-
PHP正则替换函数preg_replace和preg_replace_callback使用总结
-
[ASP.NET]如何使用类创建公共函数,在不同ASP.NET页面间重复调用
-
探讨如何使用SimpleXML函数来加载和解析XML文档
-
Angularjs中如何使用filterFilter函数过滤
-
如何在Lua中使用C/C++提供的变量、函数甚至类
-
小程序云开发教程如何使用云函数实现点赞功能