2

我想用包含 ($) 在内的变量来回显一个字符串,如下所示:

echo "$string";

我不希望它回显字符串的变量,我希望它回显 '$string' 本身,而不是变量的内容。我知道我可以通过在 ($) 前面添加一个“\”来做到这一点,但我想使用 preg_replace 来做到这一点。我试过了,但它不起作用:

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

4 回答 4

7

对字符串声明使用单引号:

echo '$string';

单引号内的变量不会被扩展:

注意:与其他两种语法不同,特殊字符的变量和转义序列在出现在单引号字符串中时不会被扩展。

另一种解决方案是逃避$你在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)

这可能会为您解决问题,但正如 Gumbo 所建议的那样:为什么不使用单引号来回显呢?

于 2009-11-14T21:22:35.080 回答
0

好吧,我认为您想删除某些变量中存在的文本。然后你可以这样做

 $foo = '123';  
 $bar = 'bqwe';                      
 $str= preg_replace("/".$foo ."/", '', $str, 1);
 $str= preg_replace("/".$bar ."/", '', $str, 1);
于 2013-12-12T09:38:41.287 回答