寻找一个嵌套的PHP模板分析器

时间:2010-05-01 12:01:12

标签: php regex parsing templates

我正在寻找可以做到这一点的PHP解析器。

{tag} Replace the tag with text coming from a function

{tag(params)} It must support params

{tag({tag(params)},{tag(params)})} It must support nesting

{tag()?

else

} It must support Tests

{$tag=value} It must support varriables

是否有人知道可以执行此操作的解析器?

或许你知道如何创造一个。我试图用preg做这个,但似乎不可能创建嵌套。

Smarty似乎有点大,我不知道你是否可以禁用它拥有的所有额外功能。我只需要上面列出的功能。

在smarty中你可以编写PHP代码而我不喜欢它。 {php} {/ php} 因此,如果我要使用它,我需要能够将其转换。

我将与CodeIgniter一起使用。

3 个答案:

答案 0 :(得分:0)

要在正则表达式中加入嵌套,必须使用递归模式(?R)。这符合整个模式。

要在文本中找到最外面的{} -s(可能还有其他内部的{}),你应该使用这样的表达式:

/{([^{}]*(?R))*[^{}]+}/

您可以在此处阅读(?R):http://pl2.php.net/manual/en/regexp.reference.recursive.php

那里有一个构造{((?>[^{}]+)|(?R))*}。也许比我建造的更有效率。

答案 1 :(得分:0)

我会选择Smarty3。当有人已经为您做了多年的开发,测试和优化时,为什么要重新发明轮子?

默认情况下,Smarty3 {php}标记处于禁用状态。它还支持security policies,您可以在其中禁用php函数调用,如果您允许用户修改模板。

答案 2 :(得分:0)

CodeIgniter在介绍它的内置模板之前做得非常好。 CodeIgniter视图模板过去只是用PHP编写,因此您可以自由使用任何您想要的PHP功能:调用结构,函数调用等。

我建议您只使用 View 而不是Template Parser