Замените переменные шаблона PHP между двойными фигурными скобками, вложенными в двухсимвольные разделители кода.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Замените переменные шаблона PHP между двойными фигурными скобками, вложенными в двухсимвольные разделители кода.

Сообщение Anonymous »

Я работаю над собственным минималистичным шаблонизатором PHP для использования в личных проектах, мне нужно решить, как сделать некоторые замены с использованием регулярного выражения. У меня есть эта строка:

Код: Выделить всё

$string = 'sometext {% {{ var1 }} middletext {{ var2 }} %} moretext {{ varx }} {% {{ var3 }} %}';
Я хочу заменить все переменные между разделителями {{ }} их эквивалентами PHP, но только если они вложены внутри разделителей {% %}
Это желаемый результат:

Код: Выделить всё

sometext {% $var1 middletext $var2 %} moretext {{ varx }} {% $var3 %}
Пока я пробовал это:

Код: Выделить всё

echo preg_replace('#\{\{\s*(.*?)\s*\}\}#', '\$$1', $string);
Я даже пробовал это регулярное выражение с предварительным просмотром:

Код: Выделить всё

echo preg_replace('#(?=.*\{%?)\{\{\s*(.*?)\s*\}\}(?=.*%\})(?!=.*\{%.*%\})#', '\$$1', $string);
Но в обоих случаях я получаю один и тот же результат: все переменные в строке заменяются независимо от того, находятся ли они внутри разделителей {% %} или нет (обратите внимание, что $varx также нежелательно заменяется) , мой неверный вывод:

Код: Выделить всё

sometext {% $var1 middletext $var2 %} moretext $varx {% $var3 %}
Я решил эту проблему и получил желаемый результат, используя циклы foreach, чтобы сначала сопоставить разделители {% %}, а затем заменить переменные в строке, используя массивы в preg_replace(), например это:

Код: Выделить всё


Подробнее здесь: [url]https://stackoverflow.com/questions/79320559/replace-php-templating-variables-between-double-curly-braces-that-are-nested-ins[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»