防止preg_replace为错误的捕获组整数


Prevent preg_replace to mistaken integer for capture group

对于我正在工作的一个项目,我需要更改/更新PHP文件。这个PHP文件有一个节'last edit',它应该包含文件最后更新的日期时间。

我遇到的问题是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
演示

只需保护替换文本中的反向引用,例如使用${1}而不是$1