preg_replace () с переменной в строке замены ест первый символ

Я пытаюсь заменить строку версии, но она всегда ест мою кулакую букву строки версии, пока я не поставил промежуток между ними: 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 а с ним выход прав, но только одно место слишком много. Я тоже пытался использовать фигурные скобки, но … не повезло.

Solutions Collecting From Web of "preg_replace () с переменной в строке замены ест первый символ"

Это замена. Из справочной документации PHP по preg_replace() :

При работе с шаблоном замены, когда за обратной репликацией сразу следует другое число (то есть: размещение литерального числа сразу после сопоставленного шаблона), вы не можете использовать знакомое обозначение \\1 для вашей обратной ссылки. \\11 , например, будет путать preg_replace() поскольку он не знает, хотите ли вы \\1 backreference, за которым следует литерал 1 , или \\11 backreference, за которым следует ничего. В этом случае решение должно использовать \${1}1 . Это создает изолированную реферрацию за 1 $1 , оставляя 1 как литерал.

Это должно делать то, что вы хотите:

 preg_replace( '/Version:([ ]*)[0-9\.]+/', 'Version:${1}'.$new_version, ...); 

демонстрация