2011-04-05 73 views
1

我想写一个简单的模板系统,我有一个问题。如果我有一个这样的字符串:如何获取两个自定义标签之间的内容?

{% for x in xx %} 
    some string 1 
{% endfor %} 

{% for y in yy %} 
    some string 2 
{% endfor %} 

我怎么能拿内容some string 1some string 2。我尝试用正则表达式,查找{% for .+ in .+ %}{% endfor %},并让他们之间的内容匹配他们,但在这种情况下,它得到的是:

some string 1 
{% endfor %} 

{% for y in yy %} 
    some string 2 

我该怎么办?

UPDATE:
我想我需要的是一个正则表达式,可以做这样的事情:

​​

正则表达式可以算?

+0

“{%for x in xx%}”和“<?”之间有什么显着差异? foreach($ xx as $ x):?>'?我强烈建议不要创建自己的模板语言,除非是为了学习目的。正如斯蒂芬所说,PHP已经成为一种优秀的模板语言。而额外的层只会造成更多的复杂性和CPU周期,而附加价值很小。 – 2011-04-05 10:46:23

+0

@fireeyedboy是的,它有一些学习的目的 – wong2 2011-04-05 14:30:16

回答

2

PHP已经作出了优秀的模板系统,如果你想要一个体面的模板系统,为什么要依靠什么会变得非常复杂的RegEx来进一步复杂化它。

+1

我只想要一个简单的模板系统,支持循环 – wong2 2011-04-05 08:27:52

+1

PHP已经这样做了,所以你从添加另一个复杂层? – Stephen 2011-04-05 09:19:44

1

很可能您正在使用.*某个地方在您的正则表达式中,这是贪婪的。尝试使用.*?,而不是非贪心。

(此外,对于任何种类的标签嵌套的,你是不是会想使用正则表达式这样的,而是你需要真正有某种参与堆栈。)

+0

是的,我会写一个递归函数来支持嵌套循环 – wong2 2011-04-05 09:09:42

相关问题