【问题标题】:PHP preg_replace: use variablePHP preg_replace:使用变量
【发布时间】:2011-02-19 11:57:31
【问题描述】:

我在使用 preg_replace 中的变量时遇到问题。 基本上我想要实现的是在文本中寻找一些模式,并用内容替换它们。替换是在一个单独的函数(retrieveValue())中完成的。但是我在传递变量 ('$1') 时遇到了困难。

$types = array(
        array(
                '/\*#(.*?)#\*/',
                $this->retrieveValue($templateVars,'$1')    
             )
        );

    foreach ($types as $type) {
        $template = preg_replace($type[0], $type[1], $template);
    }  

【问题讨论】:

    标签: php preg-replace


    【解决方案1】:

    问题是$this->retrieveValue($templateVars,'$1') 在您调用preg_replace 之前 被执行。

    解决方案:看看preg_replace_callback

    我建议你在你的类中创建一个新方法:

    public function _replace($matches) {
        return $this->retrieveValue($templateVars, $matches[1]);
    }
    

    然后可以使用:

    preg_replace_callback('/\*#(.*?)#\*/', array($this, '_replace'), $template);
    

    您还可以在 PHP 5.3 中使用anonymous functions

    【讨论】:

    • 谢谢,这似乎有效,但是是否可以将其他参数传递给 _replace 函数(除了 $matches 之外)?
    • @user485659:没有。但是如果你使用 PHP 5.3,你可以使用匿名函数和闭包。
    • @user485659:如果您需要传递更多参数并且您没有 PHP 5.3,请查看create_function。也许你可以以不同的方式添加参数。
    猜你喜欢
    • 2010-11-26
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多