我正在编写PHP中的另一个模板引擎。 Mustache.php应该真的是1.6mb ??我想要更轻,更完整的工作流程不可知。包含供应商文件并使用它的好时候发生了什么?
无论如何,语法很简单,我有一个非常简单的工作preg_replace工作简单的变量,即[[variable]]
然而,我遇到了一个问题,而我想要捕获封装的条件内容。即
[[#if this == 'that']]
To be seen or not to be that is the question!
[[/if]]
以下是我当前的正则表达式,非常接近,但我似乎无法找到关闭[[/if]]
标记的正确规则;
它捕获了结束标记:(
preg_match('/\\[\\[#if(.+)\\]\\][^\\[\\]\\/](.+)\\[\\[\\/if\\]\\]/s', $template, $ifmatches);
非常感谢任何帮助!
答案 0 :(得分:1)
This is my modification to your regex:
\[\[#(\w+)\s(.*?)\]\](.*?)\[\[\/\1\]\]
我所做的更改:
\w
匹配。我将其放入一个反向引用号为1的捕获组。(.*?)
带有反向引用2号。?
量词匹配尽可能少,并放入反向引用3。真正使这项工作更好的是?
量词。它将表达“懒惰”变成了一件好事,因为它并没有“超越”。
以下是演示如何运作的演示: