Предположим, у меня был код (или строка):
{ if 1 == 1 }Middle Part{ /if }
Затем, скажем, я хочу заменить все экземпляры
{ if 1 == 1 }Middle Part{ /if }
с участием
@if (1 == 1)Middle Part@endif
Концептуально, какой инструмент (или принцип регулярных выражений) мне нужно применить, чтобы заменить все вокруг текста, который я хочу сохранить?
Я хочу найти строки, которые начинаются с {if ... } и заканчиваются на {/if}, а затем заменить первое значение {if ... } на @if ( ... ) и второе значение, {/if} на @endif, но я не хочу трогать текст «Средняя часть». Мне также сначала нужно найти строки, начинающиеся с {if' and end with '}, и заменить на @if (' and with ')
Символически, если у меня есть ABC, я хочу иметь отображение части A, части B и части C, но только заменить A и C на их сопоставления, A-> X и C-> Z
В основном я пытаюсь быстро преобразовать файл шаблона с одного языка шаблонов на другой (в данном случае Smarty (.tpl) в Blade (.blade.php)).
Прошло немного времени с тех пор, как я использовал регулярные выражения помимо простого поиска и замены текста. Я знаю, что могу сделать это программно, но мне было интересно, есть ли инструмент, который уже позаботится об этих шаблонах.
Заранее спасибо.






Вы можете использовать это регулярное выражение, чтобы сопоставить минимальную структуру, такую как ваша тестовая строка, и захватить две переменные части в две группы, используя (.*?),
{\s*if\s*(.*?)\s*}(.*?){\s*/if\s*}
а затем замените его следующим, который сохранит ваши переменные части и поместит все в новую структуру, как вы хотите,
@if ($1)$2@endif
$s = '{ if 1 == 1 }Middle Part{ /if }';
echo preg_replace('/{\s*if\s*(.*?)\s*}(.*?){\s*/if\s*}/', '@if ($1)$2@endif', $s);
Принты,
@if (1 == 1)Middle Part@endif
С другой стороны, вы должны использовать ТОЛЬКО, если ваши структуры не являются вложенными. В случае вложенных, вам может быть лучше написать свой собственный парсер, так как в этом случае регулярного выражения будет недостаточно.