在PHP中的preg_replace()中使用每个匹配项

时间:2016-02-29 01:31:39

标签: php regex string

我已阅读有关正则表达式及其相关函数的多个教程,但我对此感到难过。

我有一个真正的简单替换,它会查找特定的分隔符并解析PHP变量的名称。这是:

var_dump(preg_replace('/{{\$(.*?)}}/', ${$1}, $this->file));

我不断收到关于php的错误,不喜欢${$1}中的#1。很公平,不能用数字开始变量名,我知道......

所以我试过了:

var_dump(preg_replace('/{{\$(.*?)}}/', ${'$1'}, $this->file));

同样的事情。

但是,如果我尝试:

var_dump(preg_replace('/{{\$(.*?)}}/', '$1 yo', $this->file));

它有效......

那么,我如何让php回显一个名为$ 1的变量。

例如:

$hola = yo;
$string = hello{{$hola}}hello{{$hola}};
var_dump(preg_replace('/{{\$(.*?)}}/', ${$1}, $string));

输出结果为:

helloyohelloyo

打扰你!

修改

我还应该提到我意识到有一个关于如何将php变量与正则表达式匹配的标准建议,但是我想让它使用我完全理解的正则表达式

1 个答案:

答案 0 :(得分:3)

像这样:

$hola = 'yo';
$string = 'hello{{$hola}}hello{{$hola}}';
$result = preg_replace_callback('/\{\{\$(.*?)\}\}/', function ($matches) use ($hola) {
    return ${$matches[1]};
}, $string);
var_dump($result);

preg_replace_callback会在每场比赛中调用回调。

为了在回调中使用$hola变量,您需要在函数(use ($hola))中明确地使其可用。

这一切都说......我不明白。这段代码的作用基本上就是PHP已经开箱即用的功能。

$hola = 'yo';
$string = "hello{$hola}hello{$hola}";
echo $string; // "helloyohelloyo"