2010-05-01 76 views
1

我正在尋找一個可以做到這一點的PHP解析器。尋找一個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似乎有點大,我不知道你是否可以禁用它的所有額外功能。我只需要上面列出的功能。

在聰明的你能夠編寫PHP代碼,我不喜歡那樣。 {php} {/ php} 所以,如果我要使用它,我需要能夠把它變成。

我打算在CodeIgniter中使用它。

回答

0

要在正則表達式中嵌入嵌套,您必須使用遞歸模式(?R)。這匹配整個模式。

要找到最{} -s在文本(可能與其他一些{}它們的內部),你應該使用表達這樣的:這裏

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

你可以閱讀(R): http://pl2.php.net/manual/en/regexp.reference.recursive.php

在那裏有一個構造{((?>[^{}]+)|(?R))*}。也許比我建造的更有效率。

0

我只想跟Smarty3一起去。爲什麼在有人已​​經爲你做了多年的開發,測試和優化時重新發明輪子?

在Smarty3 {php}標籤默認情況下是禁用的。它還支持security policies,您可以禁用PHP函數調用,如果您讓用戶修改您的模板。

0

CodeIgniter在引入它的內置模板之前做得非常好。 CodeIgniter視圖模板以前只是用PHP編寫的,因此您可以自由使用您希望的任何PHP功能:調用結構,函數調用等等。

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