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