PHP preg_replace $ 1没有空格

时间:2013-09-08 17:21:37

标签: php preg-replace space

我遇到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);

它很完美,但我需要这个没有空间!

你有什么想法吗?

谢谢!

1 个答案:

答案 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