2013-09-28 43 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,這意味着你不必仔細逃脫你$。您的\\$可以簡單地爲\$