php - 从 preg_replace 到 preg_replace_callback

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

各位网友大家好!

我在将一些旧函数更新为 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/

相关文章:

php - 如何加载静态配置信息

php - 如何在 php 的新文本区域中显示 MySQL 中更新的字段

php - 在 codeigniter 中上传图像

正则表达式最多匹配 4 个空格

php - 插入记录时创建 slug 以包含 id 和 title - php MySQL

python - 我如何编写 Python Regex 将采用 4 个数字后跟拼音字母值?示例 : 1 2 3 4 Alpha Bravo -> 1234AB

python - 当未找到子字符串 B 时,正则表达式仅匹配子字符串 A

php - 用 preg_replace 包裹 <b> 标签中的第一个单词——不能引用全字符串匹配

php - 用元素替换每个字符

php - 使用php在img后添加字符串