2011-04-05 145 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

相關問題