我正在尝试将变量名称替换为其值的样本:
<?php
$string = "value";
$$string = "value2";
?>
所以几乎$$字符串必须是$ value对吗?我想要做的是将$$字符串设为$ value,我试图用正则表达式做一些事情,但它不能在这里工作是我的代码:
<?php
function var_replaced($code)
{
}
$code = htmlspecialchars(file_get_contents("file.php"));
$code = preg_replace_callback("/$$ (.+?) /i",'var_replaced', $code);
echo $code;
?>
重点在于我使用此函数var_replaced后,我的代码将成为:
<?php
$value = "value2";
?>
知道如何解决这个问题吗?
答案 0 :(得分:1)
你需要考虑两件事。回调将与另一个局部变量上下文一起执行。它不会有外部$string
。因此,这是需要preg_replace
/e
val切换的情况之一。
你的正则表达式也是如此。你有一些空格,而.+?
将不知道在哪里停下来。它只会看一个角色。
您必须在此处限制占位符。最好查找字母数字字符。
第三,你必须逃避$
,因为它代表行或主题。
所以你所描述的方法是:
$code = preg_replace("/[$][$](\w+)/e", '$$$1', $code);
但是,如果可以,请使用_callback
,将数组中的替换变量囤积。然后在回调中进行数组查找:
function var_replaced($match)
{
list(, $varname) = $match;
$reference = $GLOBALS["yourvars"][$varname];
$value = $GLOBALS["yourvars"][$reference];
return $value;
}
这会手动查找要解释为另一个变量名的第一个键,然后获取重写变量名的值。
如果这就是你所要求的,我完全无能为力。