【问题标题】:PHP preg_replace text variablePHP preg_replace 文本变量
【发布时间】:2010-12-16 16:13:29
【问题描述】:
我想用包含 ($) 在内的变量来回显一个字符串,如下所示:
echo "$string";
我不希望它回显字符串的变量,我希望它回显“$string”本身,而不是变量的内容。我知道我可以通过在 ($) 前面添加一个“\”来做到这一点,但我想使用 preg_replace 来做到这一点。我试过了,它不起作用:
$new = preg_replace("/\$/","\\$",$text);
【问题讨论】:
标签:
php
string
replace
variables
echo
【解决方案1】:
使用single quotes 进行字符串声明:
echo '$string';
单引号内的变量不会被扩展:
注意:与其他两种语法不同,variables 和特殊字符的转义序列在单个出现时不会扩展引用strings。
另一种解决方案是像您在 preg_replace 调用中所做的那样逃避 $:
echo "\$string";
【解决方案2】:
如果我正确理解您的问题,您就不能使用preg_replace 来做您想做的事。 preg_replace在变量替换发生后获取它的参数。
所以preg_replace 没有任何东西可以替换(因为替换已经发生),或者preg_replace 不需要做任何事情(因为美元符号已经被转义)。
【解决方案3】:
正如您所观察到的,$ 被处理为双引号字符串内的变量插值。所以你的正则表达式模式也应该使用单引号字符串来构造。此外,$ 是正则表达式替换字符串中的一个特殊字符,因此您需要额外对其进行转义:
preg_replace('/\$/', '\\\\$', $text)
但是这里不需要 preg_ 函数。 str_replace 应该这样做:
str_replace('$', '\\$', $text)
这可能会为您解决问题,但正如 Gumbo 建议的那样:为什么不使用单引号来回显?
【解决方案4】:
好吧,我认为您想删除某些变量中存在的文本。然后你可以这样做
$foo = '123';
$bar = 'bqwe';
$str= preg_replace("/".$foo ."/", '', $str, 1);
$str= preg_replace("/".$bar ."/", '', $str, 1);