Замена динамической переменной в preg_replace - PullRequest
0 голосов
/ 20 февраля 2012

Я пытаюсь следующий код:

$t = '12<-- AB_C -->';
$AB_C = 'abc';
echo preg_replace('/\<-- ([A-Z_]+) --\>/', "$$1", $t);

Я хочу получить "12abc", но он выводит: 12 $ AB_C, поэтому он не распознает замену как динамическую переменную.Можно ли использовать совпавшее слово в preg_replace () в качестве переменной или динамической переменной?

Редактировать:

Для тех, кто ищет решение этой проблемы, '/ e'flag, который оценивает замену, решил проблему и возвращает результаты, которые я хочу, используя:

preg_replace('/\<-- ([A-Z_]+) --\>/e', "$$1", $t);

1 Ответ

1 голос
/ 20 февраля 2012

Не могли бы вы использовать preg_replace_callback?

Это похоже на preg_replace, но с функцией обратного вызова, которая принимает массив $matches, где $matches[0] - полное совпадение, $matches[1] - первая группа захвата и т. Д.

Возможно, что-то вроде (извините, не проверено):

 preg_replace_callback(
        '/\<-- ([A-Z_]+) --\>/',
        create_function(
            '$matches',
            'return $$matches[1];' // attempt to retrieve value of $AB_C
        ),
        $t
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...