preg_replace正在修改JavaScript

时间:2013-09-28 23:37:58

标签: php regex

我有一个模板工具,用于替换占位符,其中一个工具加载其他文件,这是我用于调试的内容:

var_dump($string);
$tmp = preg_replace('/\\$import\(("|\')' . $f . '("|\')\).*;/i', $string, $tmp);
var_dump($tmp);

第一个var_dump打印出文件的内容,在文件中有这一行JavaScript:

$("#image-menu .info").html(text.replace(/(.+?:)/, "<b>$1</b>"));

pre_replace我有第二个var_dump,然后打印出来:

$("#image-menu .info").html(text.replace(/(.+?:)/, "<b>"</b>"));

正如您所看到的,$1"取代,我不确定原因。关于它为何被取代的任何想法?

以下是完整的方法:

private function loadIncludes(){
    $tmp     = $this->template;
    $matches = array();
    preg_match_all('/(\\$import\(("|\')(.+?)("|\')\).*;)/i', $tmp, $matches);
    $files   = $matches[3];
    $replace = 0;
    foreach($files as $key => $file){
        $command = preg_replace("/\\\$import\((\"|').+?(\"|')\)/", "", $matches[0][$key]);
        $string  = $this->import($file);
        $string  = $this->runFunctions($string, "blah" . $command);
        $f       = preg_quote($file, "/");
        var_dump($string);
        $tmp     = preg_replace('/\\$import\(("|\')' . $f . '("|\')\).*;/i', $string, $tmp);
        var_dump($tmp);
        $replace++;
    }
    $this->template = $tmp;
    if($replace > 0){
        $this->loadIncludes();
    }
}

1 个答案:

答案 0 :(得分:0)

在单引号内,您无法使用\r\n等控制字符,这意味着您无需双重转义$。您的\\$可以只是\$