Проблемы с заменой модификатора / e на preg_replace_callback

У меня возникли некоторые проблемы с заменой preg_replace с модификатором / e на 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 ($ this-> templateDir. ‘\ 1’. ». ‘\ 2’)
file_get_contents ($ this-> templateDir. ‘\ 1’. ‘.’. ‘\ 2’) file_get_contents ($ this-> templateDir. ‘\ 1’. ‘.’. ‘\ 2’)
file_get_contents ($ this-> templateDir. ‘\ 1’. ‘.’. ‘\ 2’) file_get_contents ($ this-> templateDir. ‘\ 1’. ‘.’. ‘\ 2’) file_get_contents ($ this-> templateDir. ‘\ 1’. ». ‘\ 2’)

Я все еще относительно новичок в php, поэтому я не уверен, как справиться с этой проблемой.

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)

0

Другие решения

У вас есть 2 разные переменные $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 );
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);
0
По вопросам рекламы [email protected]