0

変数名をその値に置き換えようとしています。サンプルは次のとおりです。

<?php
$string = "value";
$$string = "value2";
?>

つまり、実質的に $$string は $value である必要があります。私がやろうとしているのは、$$stringを$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";
?> 

これを修正する方法はありますか?

4

1 に答える 1

1

2 つのことを考慮する必要があります。コールバックは、別のローカル変数コンテキストで実行されます。外側に手が届きません$stringpreg_replaceしたがって、これはwith /eval スイッチが必要なケースの 1 つです。

また、あなたの正規表現はかなりずれています。そこにはいくつかのスペースがあり、.+?停止する場所がわかりません。1 つの文字を表示するだけです。

ここでプレースホルダーを制約する必要があります。英数字を探すのに最適です。

$第三に、それは行または件名の終わりを表すため、エスケープする必要があります。

したがって、あなたが説明していることへのアプローチは次のようになります。

$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;
}

これは、別の変数名として解釈される最初のキーを手動で検索し、書き換えられた変数名の値をフェッチします。

それがあなたが求めていたものであるかどうかは、私にはまったくわかりません。

于 2012-10-21T22:22:26.117 に答える