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();
}
}
你爲什麼使用正則表達式來修改你的代碼? –
它不應該修改代碼,它只是應該將文件加載爲字符串並將其附加到當前字符串。 –
你必須逃避'$'標誌。 – djot