1

假设我想从 Twig 模板中拆分元数据

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

我想出了/\A---\R(.+?\R)?---\R(.*)\Z/s哪个或多或少的问题,但我想知道它是否会在回溯中变得病态。

4

1 回答 1

0

您的正则表达式似乎运行良好。

如果您“展开”第一个惰性点模式,您可能会使其效率更高一些,例如

/\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- 字符串结束。
于 2019-10-04T23:37:15.500 回答