正则表达式 php 模板,PHP中正则表达式回顾(4)--编写一个非常简单而且山寨的smarty模板引擎...
PHP的正则表达式今天就结束了,遥想几年前初次接触的时候,感觉这玩意真心玩不转啊,而时至今日,感觉这也没有什么难以理解的,确实还是有很大进步的,尤其是对smarty模板引擎有了一个更为清晰的认识。正则表达式学到最后,总是会抛出这个编写一个山寨的smarty模板引擎的话题出来练练手,今天就在大师的指导下,编写了这么一个山寨smarty,作为这次复习正则的一个句点吧。
class template{
//存储模板引擎源文件目录
private $templateDir;
//编译后的文件目录
private $compileDir;
//边界符号左边界
private $leftTag="{#";
//边界符号右边界
private $rightTag="#}";
//当前正在编译的模板文件名
private $currentTemp='';
//当前源文件中的html代码
private $outputHtml;
//变量池
private $varPool=array();
//构造函数 传入模板文件目录 编译文件目录
public function __construct($templateDir,$compileDir,$leftTag=null,$rightTag=null){
$this->templateDir=$templateDir;
$this->compileDir=$compileDir;
if(!empty($leftTag))$this->leftTag=$leftTag;
if(!empty($rightTag))$this->rightTag=$rightTag;
}
//往变量池中写入数据
public function assign($tag,$var){
$this->varPool[$tag]=$var;
}
//从变量池中取出数据的方法
public function getVar($tag){
return $this->varPool[$tag];
}
//获得源文件内容
public function getSourceTemplate($templateName,$ext='.html'){
$this->currentTemp=$templateName;
//拿到完整路径
$sourceFilename=$this->templateDir.$templateName.$ext;
//获得源文件中的html代码
$this->outputHtml=file_get_contents($sourceFilename);
}
//创建编译文件
public function compileTemplate($templateName=null,$ext='.html'){
$templateName=empty($templateName)?$this->currentTemp:$templateName;
//开始正则匹配
$pattern='/'.preg_quote($this->leftTag);
$pattern.=' *\$([a-zA-Z]\w*) *';
$pattern.=preg_quote($this->rightTag).'/';
$this->outputHtml=preg_replace($pattern, '<?php echo $this->getVar(\'$1\') ?>', $this->outputHtml);
//编译文件完整路径
$compileFilename=$this->compileDir.md5($templateName).$ext;
file_put_contents($compileFilename, $this->outputHtml);
}
//模板输出
public function display($templateName=null,$ext='.html'){
$templateName=empty($templateName)?$this->currentTemp:$templateName;
include_once $this->compileDir.md5($templateName).$ext;
}
}
$baseDir=str_replace('\\', '/', dirname(__FILE__));
$temp=new template($baseDir.'/source/',$baseDir.'/compiled/');
$temp->assign('title','学PHP的小蚂蚁');
$temp->assign('name','小蚂蚁');
$temp->getSourceTemplate('index');
$temp->compileTemplate();
$temp->display();
?>
类库很简单,主要是领悟一下模板引擎的工作思路,顺便在领悟一下OOP的编程思路。
preg_match_all()不但能获取总模式,还能将子模式匹配出来。0键为总模式匹配结果。1~n为子模式。
preg_replace()同理 $1 和 \\1 是一样的。
{#$title#}
我的名字是:{#$name#}
正则表达式 php 模板,PHP中正则表达式回顾(4)--编写一个非常简单而且山寨的smarty模板引擎...相关推荐
- c语言中如何设计和编写一个应用系统?
C程序中,如何设计和编写一个应用系统? 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 向屏幕输出一个信息,例如" ...
- 编写一个程序。要求输入5个学生的成绩(从0到100的整数)并将这5个数保存到文件“data.txt”中,然后再编写一个程序,从文件“data.txt”中读取这5个学生的成绩,计算并输出他们的平均数,然
编写一个程序.要求输入5个学生的成绩(从0到100的整数)并将这5个数保存到文件"data.txt"中,然后再编写一个程序,从文件"data.txt"中读取这5 ...
- linux正则表达式脚本实例,PowerShell中正则表达式使用例子
本文介绍PowerShell中正则表达式的使用,PowerShell的正则表达式与微软其它语言的正则表达式是一样的,使用非常方便. 正则表达式本身是怎么回事,本文不做讨论,反正PowerShell还是 ...
- java 正则表达式 table_JavaEdge/Java/Java中正则表达式.md at master · VegTableBird/JavaEdge · GitHub...
主要用到的是这两个类 - java.util.regex.Pattern - java.util.regex.Matcher. Pattern对应正则表达式,一个Pattern与一个String对象关 ...
- 查找子串在母串中的位置、编写一个函数实现字符串拼接【数据结构实验报告算法详解】
文章目录 一.查找子串在母串中的位置 二.一个实现字符串拼接的函数 一.查找子串在母串中的位置 #include<iostream> using namespace std;int Sea ...
- mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法
Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...
- oracle sql的正则表达式,Oracle SQL 语句中正则表达式的应用
REGEXP_LIKE(匹配) REGEXP_INSTR (包含) REGEXP_REPLACE(替换) REGEXP_SUBSTR(提取) 如 手机号码的表达式: ^[1]{1}[35]{1}[[: ...
- PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP
smarty模板引擎类简单工作原理 利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件.例如 模板文件中{$title} 利用正则表达式找到并替换成 ...
- php 高洛峰 正则,PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP
smarty模板引擎类简单工作原理 利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件.例如 模板文件中{$title}利用正则表达式找到并替换成 ...
最新文章
- error:use of undeclared identifier
- vsphere6.0故障:关于vCenter Appliance6.0磁盘爆满和WEB503错误问题
- [Linux] Linux命令之pstree - 以树状图显示进程间的关系
- 从数据库获取数据到Servlet.
- loacallhost:80被占用解决方法
- 作为前端程序员:你必须知道的常用英语词汇!!全是干货!!!
- Excel表格添加下拉多选
- 深度学习名词(中英文对照)
- Verilog学习日志(2021.7.31)
- Vista和Win2008中如何卸载IE8
- DataTable转换为ListT或者DataRow转换为T
- STM32———高级定时器的死区时间计算方法
- 微信小程序_map组件实现定位
- Linux中配置Aria2 RPC Server
- 8 个测试人员不背锅小建议
- 手工搭建基于ABP的框架(3) - 登录,权限控制与日志
- 2021极客大挑战web部分wp
- 出海、上市,分众传媒还能再造一个“分众”吗?
- 视频教程-企业级电商大数据推荐系统实战-大数据
- 关于DNS的域名解析