Механизм шаблонов обрабатывает как {{foo}}
, так и {{{bar}}}
, они соответствуют различным способам обработки.Создание взаимоисключающих, не перекрывающихся регулярных выражений
В настоящее время источник обрабатывается preg_replace
: {{\s*(.+?)\s*}}
и {{{\s*(.+?)\s*}}}
.
Проблема в том, что эти регулярные выражения перекрываются, например. {{\s*(.+?)\s*}}
совпадений в {{{bar}}}
.
Важное примечание: маркеры {{
, {{{
, }}
, }}}
конфигурируются пользователем в реальном коде. Поэтому обычные решения, такие как [^{}]
, не могут быть использованы.
Текущее решение заменить {{{ }}}
перед тем, чтобы {{ }}
-х годах, но этого не достаточно прочным. Действительно, маркеры настраиваются пользователем, пользователь может легко установить маркеры на значения, которые нарушают приложение.
Я пытаюсь сделать регулярные выражения, которые являются взаимоисключающими, а не зависят от заказа. Я уже пробовал использовать утверждения, условные обозначения и т. Д. Без успеха. Любая помощь будет принята с благодарностью.
Кстати, использование регулярных выражений не является обязательным, если код не становится перекрытым.
Только для того, чтобы увеличить видимость в «laravel», если вы хотите, чтобы тег шаблона мог поменять его на лезвие. –