次のように ($) を含む変数を含む文字列をエコーしたい:
echo "$string";
文字列の変数をエコーしたくありません。変数の内容ではなく、「$ string」自体をエコーしたいのです。($) の前に '\' を追加することでこれを実行できることはわかっていますが、preg_replace を使用して実行したいと考えています。私はこれを試しましたが、うまくいきません:
$new = preg_replace("/\$/","\\$",$text);
文字列宣言には一重引用符を使用します。
echo '$string';
一重引用符内の変数は展開されません。
注:他の 2 つの構文とは異なり、特殊文字の変数とエスケープ シーケンスは、それらが単一引用符で囲まれた文字列内にある場合、展開されません。
別の解決策は、呼び出し$
内で既に行ったようにエスケープすることです。preg_replace
echo "\$string";
私があなたの質問を正しく理解していれば、あなたがpreg_replace
やりたいことをするために使うことはできません。preg_replace
変数置換が行われた後に引数を取得します。
したがって、置換するものがないpreg_replace
(置換が既に行われているため) か、preg_replace
何もする必要がない (ドル記号が既にエスケープされているため) かのいずれかです。
あなたが観察したように、$
は二重引用符で囲まれた文字列内の変数補間のために扱われます。したがって、単一引用符で囲まれた文字列も使用して正規表現パターンを構築する必要があります。また、$
は正規表現置換文字列内の特殊文字であるため、さらにエスケープする必要があります。
preg_replace('/\$/', '\\\\$', $text)
ただし、ここでは preg_ 関数は必要ありません。str_replace はそれを行う必要があります:
str_replace('$', '\\$', $text)
これで問題が解決するかもしれませんが、ガンボが示唆しているように、一重引用符を使用してエコーしないのはなぜですか?