【发布时间】:2013-10-05 01:18:32
【问题描述】:
我有一个模板工具,它替换占位符,其中一个工具加载其他文件,这是我用于调试的:
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 谢谢!这解决了我的问题!