2009-11-14 48 views
2

我想呼應裏面包括($)與變量的字符串,像這樣:PHP的preg_replace文本變量

echo "$string"; 

我不希望它反映了對字符串變量,我希望它回聲「$字符串「本身,而不是變量的內容。我知道我可以通過在($)前添加一個'\'來完成此操作,但我想使用preg_replace來完成此操作。我想這和它不工作:

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

回答

7

使用single quotes爲您的字符串聲明:

echo '$string'; 

單引號內的變量沒有得到擴大:

注:不像兩種其他語法,variables和特殊字符轉義序列將不是當它們出現在單引號strings中時會被擴展。

另一個解決方案是爲了躲避$像你已經在preg_replace調用中所做的:

echo "\$string"; 
+0

哈哈哇謝謝 – David 2009-11-14 21:14:38

1

如果我正確理解你的問題,你不能使用preg_replace做你想做什麼。 preg_replace在變量替換髮生後獲取它的參數。

因此,無論有沒有什麼爲preg_replace更換(因爲替代已經發生),或者沒有必要preg_replace做任何事情(因爲美元符號已經逃走)。

0

正如您所看到的那樣,$在雙引號字符串內部進行了可變插值處理。所以你的正則表達式模式也應該使用單引號字符串來構建。此外,$是正則表達式替換字符串內使用特殊字符,所以你需要額外的轉義:

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

但有沒有必要在這裏參看preg_功能。 str_replace函數應該這樣做:

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

這可能明確的事情了你,但濃湯建議:爲什麼不使用單引號來呼應?

0

嗯,我想你想刪除一些變量中存在的文本。然後你就可以像

$foo = '123'; 
$bar = 'bqwe';      
$str= preg_replace("/".$foo ."/", '', $str, 1); 
$str= preg_replace("/".$bar ."/", '', $str, 1);