PHP preg_replace在主题中以'$'意外表现

时间:2014-11-05 12:26:33

标签: php preg-replace

我有以下代码:

echo preg_replace("/test/","$1000","this is a test");

我希望打印出来:"这是$ 1000",而是我得到"这是00"。

这是一个简化的例子,它指出了我此刻遇到的问题。在这种情况下我不能使用str_replace。我也无法取代' $'使用' $#36',我的编程中有递归功能,这取决于' $'留下一个' $'和#36;#36'留下#36;#36'。

2 个答案:

答案 0 :(得分:2)

在替换字符串中,$用于将反向引用写入捕获组,因此您需要将其转义。

echo preg_replace("/test/","\\$1000","this is a test");
原始代码$10中的

被解释为对捕获组编号10的反向引用(不存在)。由于反向引用的数量限制为99,因此只考虑两个第一个数字。

答案 1 :(得分:1)

$1是对捕获子模式的反向引用,即由括号捕获的任何内容。 $0引用匹配的字符串本身,$1是第一个与括号匹配的字符串等。您没有任何捕获括号,因此它是空的。

http://php.net/manual/en/regexp.reference.back-references.php