我有以下代码:
echo preg_replace("/test/","$1000","this is a test");
我希望打印出来:"这是$ 1000",而是我得到"这是00"。
这是一个简化的例子,它指出了我此刻遇到的问题。在这种情况下我不能使用str_replace。我也无法取代' $'使用' $#36',我的编程中有递归功能,这取决于' $'留下一个' $'和#36;#36'留下#36;#36'。
答案 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