【问题标题】:FROM preg_replace TO preg_replace_callback从 preg_replace 到 preg_replace_callback
【发布时间】:2014-04-27 02:59:06
【问题描述】:

各位网友大家好!

我在将一些旧函数更新为 preg_replace_callback 时遇到问题。 编辑:我做错了什么?

这是我的第一个(preg_replace/deprecated)函数:

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的回答修复了以下错误:

警告:preg_replace_callback():修饰符 /e 不能与 第 52 行 /var/www/inc/engine.php 中的替换回调

); <-- line 52
$out .= $buffer;

编辑:我不知道如何处理这个渲染部分..

$buffer = preg_replace("#§([a-z0-9-_]+)\.?([a-z0-9-_]+)?#ie","\$templ->\\1(\\2)",$buffer);

现在它正在呈现一个空白页面..我猜错误在

返回模板($m[1], $m[2]);

【问题讨论】:

  • 抱歉,有什么问题?
  • 哦,感谢您的关注!我不知道我在尝试中做错了什么(第二个代码块)
  • 好的,您遇到错误了吗?如果有,它们是什么?请将它们添加到问题中,这将使我们更容易为您提供帮助。
  • 抱歉.. 我刚刚将错误添加到我的原始帖子中 :) 感谢您抽出宝贵时间解决我的问题

标签: php regex preg-replace deprecated preg-replace-callback


【解决方案1】:

正如消息中所说,删除了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
);

【讨论】:

  • 效果很好!至少它给了我一个新的错误。抱歉,我还不能投票给你,我需要更多的代表
  • 现在它抛出了我:警告:preg_replace_callback() 至少需要 3 个参数,2 个在 /var/www/inc/engine.php 第 52 行给出
  • @mlv:我已经编辑了整个指令。它对我来说很好用。可能是你用错了。
  • 谢谢!它不起作用,因为我试图将 templ 作为变量而不是函数返回...返回 @templ ...
  • 这并不能解决问题,只是那个错误(谢谢你帮助我)
猜你喜欢
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
相关资源
最近更新 更多