Как я могу заменить внешнее содержимое строки с помощью регулярного выражения?

Предположим, у меня был код (или строка):

{ 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)).

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

Заранее спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать это регулярное выражение, чтобы сопоставить минимальную структуру, такую ​​​​как ваша тестовая строка, и захватить две переменные части в две группы, используя (.*?),

{\s*if\s*(.*?)\s*}(.*?){\s*/if\s*}

а затем замените его следующим, который сохранит ваши переменные части и поместит все в новую структуру, как вы хотите,

@if ($1)$2@endif

Демо

Демонстрация PHP-кода

$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

С другой стороны, вы должны использовать ТОЛЬКО, если ваши структуры не являются вложенными. В случае вложенных, вам может быть лучше написать свой собственный парсер, так как в этом случае регулярного выражения будет недостаточно.

Другие вопросы по теме