热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正则表达式php模板,PHP中正则表达式回顾(4)编写一个非常简单而且山寨的smarty模板引擎...

PHP的正则表达式今天就结束了,遥想几年前初次接触的时候,感觉这玩意真心玩不转啊,而时至今日,感觉这也没有什么难以理解的&#

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, '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#}



推荐阅读
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文详细介绍了如何检查和配置电脑上的PHP环境,包括位数、运行支持以及文件格式的打开方式。适合初学者了解PHP的基础知识和操作方法。 ... [详细]
  • 本文详细介绍了JSP的三大指令:page、include和taglib,重点探讨了静态包含与动态包含的区别及其应用场景,并解释了如何使用taglib指令引入第三方标签库。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文深入探讨了面向切面编程(AOP)的概念及其在Spring框架中的应用。通过详细解释AOP的核心术语和实现机制,帮助读者理解如何利用AOP提高代码的可维护性和开发效率。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • 对于许多初学者而言,遇到总线错误(bus error)或段错误(segmentation fault/core dump)是极其令人困扰的。本文详细探讨了这两种错误的成因、表现形式及解决方法,并提供了实用的调试技巧。 ... [详细]
  • 本文探讨了C++编程中理解代码执行期间复杂度的挑战,特别是编译器在程序运行时生成额外指令以确保对象构造、内存管理、类型转换及临时对象创建的安全性。 ... [详细]
  • 本文详细介绍了get和set方法的作用及其在编程中的实现方式,同时探讨了点语法的使用场景。通过具体示例,解释了属性声明与合成存取方法的概念,并补充了相关操作的最佳实践。 ... [详细]
  • 本文详细介绍了C语言中的基本数据类型,包括整型、浮点型、字符型及其各自的子类型,并探讨了这些类型在不同编译环境下的表现。 ... [详细]
author-avatar
UJXo小妖春日望美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有