Как использовать значение $ regex в качестве переменной php? - PullRequest
0 голосов
/ 10 апреля 2020

Случай

Я уже объявил php переменную, подобную этой

    <?php $covid19=200;?>

Тогда у меня html разметка, подобная этой

    {{:covid19:}}

У меня есть регулярное выражение, чтобы соответствовать этому шаблону, как это

    /\{\{:(.*?):\}\}/si

У меня есть правило замены preg

    <p>$1</p>

, и оно отлично работает и дает этот результат

   <p>covid19</p>

Все хорошо

Мои ожидания

Я хочу, чтобы этот результат был получен

    <?php echo $covid19;?>

Конечно, это

    200

Ответы [ 2 ]

3 голосов
/ 10 апреля 2020

Просто используйте это как замену:

<?php echo \$$1; ?>

Вы просто добавляете буквенный текст и экранируете $ для переменной. Это приведет к 200, пока этот код будет затем проанализирован как PHP.

Если нет, и вам нужно заменить на 200 (значение $covid19). Тогда, пока $covid19 находится в глобальной области видимости, вы можете использовать:

$result = preg_replace_callback('/\{\{:(.*?):\}\}/si',
                                function($m) {
                                    return $GLOBALS[$m[1]];
                                },
                                $string);
1 голос
/ 10 апреля 2020

Вы не можете использовать внешние переменные таким образом. $ 1 относится к переменной в регулярному выражению, а не к внешней. Это просто значение первых соответствующих скобок в регулярном выражении.

Чтобы использовать внешнюю переменную, а также любое другое выражение, вам нужно использовать функцию preg_replace_callback ().

Что-то вроде этого ( Я не запускал этот код, может содержать ошибки):

preg_replace_callback('/\{\{:(.*?):\}\}/si', function ($matches) { return $GLOBALS[$matches[1]]; }, $subject);

Обратите внимание, я использую массив $ GLOBALS, предполагая, что ваши переменные являются глобальными. Если это не так, вам нужно использовать другой способ для достижения переменной в правильной области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...