假设我要从Twig模板中拆分元数据
---
some metadata
multiple lines
---
Twig template
More data
我想出了/\A---\R(.+?\R)?---\R(.*)\Z/s
,它或多或少地做到了,但我想知道它在回溯中是否会变得病态。
您的正则表达式似乎运行良好。
如果您像第一个那样“展开”第一个惰性点图案,可能会使其更有效率。
/\A---\R(.*(?:\R(?!---\R).*)*\R)?---\R(?s)(.*)\Z/
请参见regex demo。注意:不需要修饰符,该模式内有一个内联
(?s)
修饰符。
详细
\A
-字符串开头---\R
-包含换行符的完整---
行(.*(?:\R(?!---\R).*)*\R)?
-可选的捕获组1:.*
-整行(?:\R(?!---\R).*)*
-0或更多重复\R(?!---\R)
-换行符,后面没有---
行,后面有换行符.*
-整行\R
-换行符序列---\R
-包含换行符的完整---
行(?s)
-内联DOTALL修饰符,使右匹配点的点换行符](.*)
组2:尽可能多的0+个字符\Z
-字符串结尾。