PHP preg_replace:使用变量

发布于 2024-10-18 04:38:48 字数 403 浏览 2 评论 0原文

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

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

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

I'm having a problem using a variable from preg_replace.
Basically what I want to achieve is to look for some patterns in a text, and replace them by content. The replacement is done in a seperate function (retrieveValue() ). However I'm having difficulties passing the variable ('$1').

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静赏你的温柔 2024-10-25 04:38:48

问题是 $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);

您还可以使用 匿名函数

The problem is that $this->retrieveValue($templateVars,'$1') is executed before you call preg_replace.

Solution: Have a look at preg_replace_callback.

I suggest you create a new method in your class:

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

and then can use:

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

You can also make use of anonymous functions in PHP 5.3.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文