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