我在使用/ e修饰符将preg_replace替换为此函数中的preg_replace_callback时遇到了一些麻烦:
private function parseFunctions() {
// replaces includes ( {include file="..."} )
while( preg_match( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\""
.$this->rightDelimiterF ."/isUe", $this->template) )
{
$this->template = preg_replace( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\""
.$this->rightDelimiterF."/isUe",
"file_get_contents(\$this->templateDir.'\\1'.'.'.'\\2')",
$this->template );
}
// deletes comments from the template files
$this->template = preg_replace( "/" .$this->leftDelimiterC ."(.*)" .$this->rightDelimiterC ."/isUe",
"", $this->template );
}
你能帮我解决这个问题吗?
编辑:
我设法修复了第二个,但另一个
{
$this->template = preg_replace_callback( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\""
.$this->rightDelimiterF."/isU",
function(){$replacement="file_get_contents(\$this->templateDir.'\\1'.'.'.'\\2')";
return $replacement;},
$this->template );
}
没用。 我收到以下错误消息:
的file_get_contents($这 - > TEMPLATEDIR '\ 1' '\ 2'。 '')。 file_get_contents($ this-> templateDir。'\ 1'。'。'。'\ 2')file_get_contents($ this-> templateDir。'\ 1'。'。'。'\ 2') file_get_contents($ this-> templateDir。'\''。'。'。'\ 2')file_get_contents($ this-> templateDir。'\ 1'。'。'。'\ 2')file_get_contents($ this - > ''。TEMPLATEDIR '\ 1' '\ 2')
我还是相对较新的php,所以我不知道如何处理这个问题。
答案 0 :(得分:0)
最后,我理解你要做的事情。
回调函数应该接收所有匹配或单个匹配的数组(取决于找到的内容)。
所以它看起来像这样:
$this->template = preg_replace_callback( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF."/isU",
function($match){
$replacement="file_get_contents(\$this->match.'\\1'.'.'.'\\2')";
return $replacement;},
this->template );
如果在匿名函数中需要一些外部变量,则将回调函数声明为
function($match) use ($varname)
答案 1 :(得分:0)
您有两个不同的变量$match
和$matches
。这是一个有效的代码:
$this->template = preg_replace_callback(
"/".$this->leftDelimiterF.'include file="([^"]+)"'.$this->rightDelimiterF."/isU",
function($match){
$replacement = "file_get_contents(\$this->templateDir.$match[1])";
return $replacement;
},
$this->template );
答案 2 :(得分:0)
$this->template = preg_replace_callback("/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\""
.$this->rightDelimiterF."/isU",
function ($m) { return file_get_contents($this->templateDir.$m[1].'.'.$m[2]);},
$this->template);