preg_replace и file_get_contents - как получить $ {1}? - PullRequest
1 голос
/ 09 апреля 2011

У меня есть этот фрагмент кода:

echo preg_replace('/\!(.*)\!/', file_get_contents('${1}'), $str);

Что он должен сделать, это заменить все !...! содержимым файла, указанного между восклицательными знаками.Однако, это не работает, потому что ${1} не заменяется:

Warning: file_get_contents(${1}) [function.file-get-contents]: failed to open stream: No such file or directory

Если я кодирую:

echo preg_replace('/\!(.*)\!/', '${1}', $te);

все в порядке (то есть текст между !...! заменяетсясамим текстом).

Как сделать так, чтобы ${1} in file_get_contents также был заменен?

Ответы [ 2 ]

1 голос
/ 09 апреля 2011
echo preg_replace_callback('/\!(.*)\!/', function($matches) {
    return file_get_contents($matches[1]);
}, $str);

Вот, пожалуйста. Используйте preg_replace_callback для такого рода замен, где вам нужно вызвать пользовательскую функцию для совпадений, которая выдаст строку замены.

0 голосов
/ 09 апреля 2011

Вы также можете использовать модификатор e, например:

echo preg_replace('/!(.*)!/e', 'file_get_contents("$1");', $str);

Но, как и функция eval(), в некоторых случаях это может стать злом .

...