各位网友大家好!
我在将一些旧函数更新为 preg_replace_callback 时遇到问题。 编辑:我做错了什么?
这是我的第一个(preg_replace/已弃用)函数:
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
@eval('$templ = new '.TEMPL_CLASS.';');
$buffer = preg_replace("#§([a-z0-9-_]+)\.?([a-z0-9-_]+)?#ie","\$templ->\\1(\\2)",$buffer);
$out .= $buffer;
}
fclose($handle);
}
第二个函数(这是我尝试转换为 preg_replace_callback):
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
@eval('$templ = new '.TEMPL_CLASS.';');
$buffer = preg_replace_callback(
'#§([\w-]+)\.?([\w-]+)?#',
function ($m) {
@$templ->$m[1]($m[2]);
},
$buffer
);
$out .= $buffer;
}
fclose($handle);
}
老了! M42 的 answear 修复了以下错误:
Warning: preg_replace_callback(): Modifier /e cannot be used with replacement callback in /var/www/inc/engine.php on line 52
); <-- line 52
$out .= $buffer;
编辑:我不知道如何处理这个的渲染部分..
$buffer = preg_replace("#§([a-z0-9-_]+)\.?([a-z0-9-_]+)?#ie","\$templ->\\1(\\2)",$buffer);
现在它正在渲染一个空白页面..我猜错误出在
return templ($m[1], $m[2]);
最佳答案
正如消息中所述,删除了 e
修饰符:
'#§\\(\\[a-z0-9-_\\]+\\)\.?\\(\\[a-z0-9-_\\]+\\)?#i'
// here ___^
并且不需要转义所有这些字符:
'#§([a-z0-9_-]+)\.?([a-z0-9_-]+)?#i'
[a-z0-9_]
可以重写 \w
并且不需要 i
修饰符
'#§([\w-]+)\.?([\w-]+)?#'
整个指令变为:
$buffer = preg_replace_callback(
'#§([\w-]+)\.?([\w-]+)?#',
function ($m) {
return templ($m[1], $m[2]);
},
$buffer
);
关于php - 从 preg_replace 到 preg_replace_callback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22530027/