2009-11-14 49 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);