我已经在自己的模板引擎上工作了一段时间,但我仍然被困在像
这样的文件中<block : block1>
<table>
<block : row>
<tr>
<td>
{value}
</td>
<td>
{value2}
</td>
</tr>
</block>
</table>
</block>
我可以使用正则表达式获得“块1”但它会在第一个(“行”之一)中断
但我想要一种更聪明的方式(而不是使用像DOM这样的功能) 我在考虑像
这样的东西while($i < strlen($code)){
if(substr($code,$i,1)){
//tag is opened
}
}
答案 0 :(得分:3)
基本上,你在这里构建一种编程语言(尽管很简单,它仍然是一种编程语言)。要解释编程语言,您需要一个编译器,它通常包含词法分析器(将输入流分成有意义的标记)和解析器(其中)逐个读取令牌并采取所需的任何操作)。在您的简化示例中,词法分析器可能是基于regexp的,并且解析器可以是一个简单的基于堆栈的解析器。
( italic 中的术语实际上应该是维基百科链接)。
答案 1 :(得分:0)
我不完全确定你的问题是什么,但是在PHP中模仿语言已经有很多争论,但我认为 现在达成的普遍共识是滚动通常没有多大意义 你自己的模板语言。你可以通过例如获得即时的好结果。使用字符串替换 和正则表达式,但最终你需要更多的功能,如循环 或其他表达式,然后它将变得非常棘手(最终以创建自己的编译器结束)。
最好的建议通常是直接使用PHP作为模板语言 (这就是PHP首先设计的,并且严格遵循MVC模式也是一个很好的解决方案)或尝试一个 现有的模板引擎。只有你不能做任何一个 满足您的需求(大多数都可以通过插件机制扩展) 你应该开始制作自己的。