我已阅读有关正则表达式及其相关函数的多个教程,但我对此感到难过。
我有一个真正的简单替换,它会查找特定的分隔符并解析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变量与正则表达式匹配的标准建议,但是我想让它使用我完全理解的正则表达式
答案 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"