我遇到preg_replace和$ 1 +变量的问题,而且在$ 1和变量之间没有空格。
我有这段代码:
$replace_id = 5000;
$search = 1000;
$movies = '[1000,2000,2300,1234]';
$new_movies = preg_replace('#(,|\[)'.$search.'(,|\])#Uis','$1'.$replace_id.'$2',$movies);
echo $new_movies;
输出:
000,2000,2300,1234]
但我希望得到这个输出:
[5000,2000,2300,1234]
当我使用preg_replace,空格介于$ 1和$ replace_id之间时:
$new_movies = preg_replace('#(,|\[)'.$search.'(,|\])#Uis','$1 '.$replace_id.'$2',$movies);
它很完美,但我需要这个没有空间!
你有什么想法吗?
谢谢!
答案 0 :(得分:6)
来自文档:
当使用替换模式时,后向引号后面会紧跟另一个数字(即:在匹配的模式后立即放置一个文字数字),您不能使用熟悉的\ 1表示法进行反向引用。 \ 11,例如,会混淆preg_replace(),因为它不知道你是否希望\ 1反向引用后跟文字1,或者\ 11反向引用后跟什么都没有。在这种情况下,解决方案是使用\ $ {1} 1。这会创建一个隔离的$ 1反向引用,将1保留为文字。
http://php.net/manual/en/function.preg-replace.php
所以我会使用'${1}'.$replace_id