2013-09-28 41 views
3

我有一个模板工具,替换占位符的工具加载其他文件的作品之一,这里是我使用调试什么:的preg_replace被修改JavaScript

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(); 
    } 
} 
+0

你为什么使用正则表达式来修改你的代码? –

+0

它不应该修改代码,它只是应该将文件加载为字符串并将其附加到当前字符串。 –

+4

你必须逃避'$'标志。 – djot

回答

0

单引号的,你不能使用控制字符,如\r\n,这意味着你不必仔细逃脱你$。您的\\$可以简单地为\$