不推荐使用:preg_replace():不推荐使用/ e修饰符,而是使用preg_replace_callback

时间:2014-01-24 14:18:06

标签: php

我需要一些帮助。由于我们不推荐使用preg_replace,因此我必须将所有my preg_replace转换为preg_replace_callback ...

我尝试了什么:

变化:

$template = preg_replace ( "#\\[aviable=(.+?)\\](.*?)\\[/aviable\\]#ies", "\$this->check_module('\\1', '\\2')", $template );

要:

$template = preg_replace_callback ( "#\\[aviable=(.+?)\\](.*?)\\[/aviable\\]#isu", 
                return $this->check_module($this['1'], $this['2']);
            $template );

错误:

Parse error: syntax error, unexpected 'return' 

1 个答案:

答案 0 :(得分:9)

callback需要是一个带有一个参数的函数,这是一个匹配数组。您可以传递任何类型的callback,包括anonymous function

$template = preg_replace_callback(
    "#\\[aviable=(.+?)\\](.*?)\\[/aviable\\]#isu",
    function($matches) {
        return $this->check_module($matches[1], $matches[2]);
    },
    $template
);

(为了在匿名函数中使用$this,需要PHP> = 5.4.0)