Php 如何在两个自定义标记之间获取内容?
我正在尝试编写一个简单的模板系统,但我遇到了一个问题。如果我有这样一个字符串:Php 如何在两个自定义标记之间获取内容?,php,regex,Php,Regex,我正在尝试编写一个简单的模板系统,但我遇到了一个问题。如果我有这样一个字符串: {% for x in xx %} some string 1 {% endfor %} {% for y in yy %} some string 2 {% endfor %} 如何获取内容某些字符串1和某些字符串2。我尝试将它们与正则表达式匹配,正则表达式查找{%for.+in.+%}和{%endfor%}并获取它们之间的内容,但在本例中,它得到的是: some string 1 {%
{% for x in xx %}
some string 1
{% endfor %}
{% for y in yy %}
some string 2
{% endfor %}
如何获取内容某些字符串1
和某些字符串2
。我尝试将它们与正则表达式匹配,正则表达式查找{%for.+in.+%}
和{%endfor%}
并获取它们之间的内容,但在本例中,它得到的是:
some string 1
{% endfor %}
{% for y in yy %}
some string 2
我该怎么办
更新:我想我需要的是一个正则表达式,它可以做这样的事情:
count = 0
while not the end:
if match("{% for .+ in .+ %}")
count += 1
else if match("{% endfor %}")
count -= 1
if count == 0
// get contents between the first {% for in %} and the last {% endfor %}
正则表达式可以计数吗?很可能您正在正则表达式的某个地方使用
*
,这是贪婪的。尝试使用*?
代替,这是非贪婪的
(另外,对于任何类型的标记嵌套,您都不希望像那样使用regex;相反,您需要实际使用某种类型的堆栈。)PHP已经是一个优秀的模板系统,如果你想要一个像样的模板系统,为什么还要依赖一个非常复杂的正则表达式来进一步使它复杂化呢。我只想要一个支持loopsPHP的简单模板系统,但是它已经做到了这一点,那么增加另一层复杂度有什么好处呢?是的,我将编写一个递归函数来支持嵌套循环,
{%for x in xx%}
和
之间的显著区别是什么?我强烈建议不要创建自己风格的模板语言,除非是为了学习。正如Stephan所说,PHP已经成为一种优秀的模板语言。额外的层只会增加复杂性和CPU周期,几乎没有附加值。@fireeyedboy是的,它有一些学习的目的