对于我正在处理的项目,我需要更改/更新PHP文件。 这个PHP文件有一个“最后编辑”部分,它应该包含文件的最后更新日期时间。
我遇到的问题是preg_replace误解了我的捕获组$1
$12
我该如何解决这个问题?
<?php
$source = <<<'SOURCE'
<?php
/*
bla bla bla bla
================================================
- Installer for Foo v.1.00
================================================
author : tommy
created at : 26-07-2014 15:45:39
edited by : tommy
last edit : 26-07-2014 15:54:31
remarques :
===============================================*/
# IMPORTANT : Don't change closure name
$func = function() {
/* -- Do stuff here -- */
};
SOURCE;
function getLoggedInUser() {
return 'LLama';
}
function updateFileInformation($code) {
$pattern = '#({placeholder}.+:\s+)(.+)(\n)#mi';
$needles = [
str_replace('{placeholder}', 'edited by', $pattern),
str_replace('{placeholder}', 'last edit', $pattern),
];
$replacements = [
'$1'.getLoggedInUser().'$3',
'$1'.date('d-m-Y H:i:s').'$3',
];
return preg_replace($needles, $replacements, $code);
}
echo updateFileInformation($source);
预期输出应为:
Last edit : 26-07-2014 16:07:15
实际输出:
6-07-2014 16:07:15
答案 0 :(得分:1)
只需保护替换文字中的反向引用,例如使用${1}
代替$1
。