使用相应变量的值替换变量名称

时间:2012-10-21 21:56:50

标签: php regex function

我正在尝试将变量名称替换为其值的样本:

<?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";
?> 

知道如何解决这个问题吗?

1 个答案:

答案 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;
}

这会手动查找要解释为另一个变量名的第一个键,然后获取重写变量名的值。

如果这就是你所要求的,我完全无能为力。