Я пытаюсь заменить строку версии, но она всегда ест мою кулакую букву строки версии, пока я не поставил промежуток между ними: 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()поскольку он не знает, хотите ли вы\\1backreference, за которым следует литерал1, или\\11backreference, за которым следует ничего. В этом случае решение должно использовать\${1}1. Это создает изолированную реферрацию за1$1, оставляя1как литерал.
Это должно делать то, что вы хотите:
preg_replace( '/Version:([ ]*)[0-9\.]+/', 'Version:${1}'.$new_version, ...);
демонстрация