Как я могу заменить внешнее содержимое строки с помощью регулярных выражений? - PullRequest
2 голосов
/ 11 апреля 2019

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

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

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

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

1 Ответ

0 голосов
/ 11 апреля 2019

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

{\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

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

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