我正在寻找可以做到这一点的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一起使用。
答案 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。