我正在尝试替换版本字符串,但它总是吃掉我的拳头字母字符串,直到我在其间放置一个空格:Version:$1 $new_version
但我不想这样做,并想了解这里发生的事情。
文件内容:
Version: 4.4.4
我的代码的相关部分:
$new_version = 6.6.6
$new_main_file_content = preg_replace(
'/Version:([ ]*)[0-9\.]+/',
"Version:$1$new_version",
file_get_contents($main_file)
);
如果没有空格,则输出为Version:.6.6
,并且输出正确,但只有一个空格太多。我也试过使用花括号,但是......没有运气。
答案 0 :(得分:4)
这是一个替代品。来自PHP manual documentation on preg_replace()
:
当使用替换模式时,后向引号后面紧跟另一个数字(即:在匹配的模式后立即放置一个文字数字),您不能使用熟悉的
\\1
表示法进行反向引用。例如,\\11
会混淆preg_replace()
,因为它不知道您是否希望\\1
反向引用后跟文字1
或\\11
后引用没什么。在这种情况下,解决方案是使用\${1}1
。这会创建一个孤立的$1
反向引用,将1
保留为文字。
这应该做你想要的:
preg_replace( '/Version:([ ]*)[0-9\.]+/', 'Version:${1}'.$new_version, ...);