2

次のように ($) を含む変数を含む文字列をエコーし​​たい:

echo "$string";

文字列の変数をエコーし​​たくありません。変数の内容ではなく、「$ string」自体をエコーし​​たいのです。($) の前に '\' を追加することでこれを実行できることはわかっていますが、preg_replace を使用して実行したいと考えています。私はこれを試しましたが、うまくいきません:

$new = preg_replace("/\$/","\\$",$text);
4

4 に答える 4

7

文字列宣言には一重引用符を使用します。

echo '$string';

一重引用符内の変数は展開されません。

注:他の 2 つの構文とは異なり、特殊文字の変数とエスケープ シーケンスは、それらが単一引用符で囲まれた文字列内にある場合、展開されません

別の解決策は、呼び出し$内で既に行ったようにエスケープすることです。preg_replace

echo "\$string";
于 2009-11-14T21:13:06.427 に答える
1

私があなたの質問を正しく理解していれば、あなたがpreg_replaceやりたいことをするために使うことはできません。preg_replace変数置換が行われた後に引数を取得します。

したがって、置換するものがないpreg_replace(置換が既に行われているため) か、preg_replace何もする必要がない (ドル記号が既にエスケープされているため) かのいずれかです。

于 2009-11-14T21:19:54.570 に答える
0

あなたが観察したように、$は二重引用符で囲まれた文字列内の変数補間のために扱われます。したがって、単一引用符で囲まれた文字列も使用して正規表現パターンを構築する必要があります。また、$は正規表現置換文字列内の特殊文字であるため、さらにエスケープする必要があります。

preg_replace('/\$/', '\\\\$', $text)

ただし、ここでは preg_ 関数は必要ありません。str_replace はそれを行う必要があります:

str_replace('$', '\\$', $text)

これで問題が解決するかもしれませんが、ガンボが示唆しているように、一重引用符を使用してエコーしないのはなぜですか?

于 2009-11-14T21:22:35.080 に答える