Разделение внешнего вида из шаблона Twig с помощью PCRE - PullRequest
1 голос
/ 05 октября 2019

Допустим, я хочу отделить метаданные от шаблона Twig

---
some metadata
multiple lines
---
Twig template
More data

Я придумал /\A---\R(.+?\R)?---\R(.*)\Z/s, который делает это более или менее, но мне интересно, может ли это стать патологическим при возврате.

1 Ответ

0 голосов
/ 05 октября 2019

Ваше регулярное выражение, кажется, работает хорошо.

Вы можете сделать его несколько более эффективным, если вы "развернете" первый ленивый шаблон точек, например,

/\A---\R(.*(?:\R(?!---\R).*)*\R)?---\R(?s)(.*)\Z/

См. Демонстрационную версию регулярных выражений . Примечание: никаких модификаторов не требуется, в шаблоне есть один встроенный модификатор (?s).

Подробности

  • \A - начало строки
  • ---\R - полная строка --- с переводом строки
  • (.*(?:\R(?!---\R).*)*\R)? - дополнительная группа захвата 1:
    • .* - вся строка
    • (?:\R(?!---\R).*)* - 0 или более повторений
      • \R(?!---\R) - разрыв строки, за которым не следует строка ---, за которой следует разрыв строки
      • .* - весьстрока
    • \R - последовательность перевода строки
  • ---\R - полная строка --- с переводом строки
  • (?s) - встроенный модификатор DOTALL, делающий точки справа от совпадающих символов разрыва строки
  • (.*) Группа 2: любые 0+ символов максимально возможного числа
  • \Z - конецстроки.
...