php模板引擎常见的变量解析语法

作者:enenba | 发表于:2012-12-12 12:49 | 分类:php源码

php模板引擎常见的变量解析语法,看了很多的cms它们都有自己的模板引擎,因为折腾多了所以总结下他们的正则替换语法。

是这样的过程 ,模板文件->php正则替换标签->缓存php文件->读取输出

本文主要说的是变量、数组的模板引擎语法(正则规则)。

{$var}  解析成 <?php echo $var; ?>
{$var['key']}  解析成 <?php echo $var['key']; ?>
<?php
$str = '{$var} <br />{$var["key"]}';
$str = preg_replace("/\{(\\\$[a-zA-Z0-9_\[\]\'\"\$\.]+)\}/s", "<?php echo \\1; ?>", $str);
highlight_string($str);
?>

以上是最简单的解析成变量的标签
{$var}这样写还觉得麻烦?
还可以这样

 

{var} 解析成 <?php echo $var; ?>
{var['key']}  解析成 <?php echo $var['key']; ?>
<?php
$str = '{var} <br />{var["key"]}';
$str = preg_replace("/\{([a-zA-Z0-9_\[\]\'\"\$\.]+)\}/s", "<?php echo \\1; ?>", $str);
highlight_string($str);
?>

当然简写了会照成内容和标签冲突。比如 javascript、json等代码,所以改成
可变的模板标签

如:
使用特殊的字符:
使用“<[”代表 变量首标签
使用“]>”代表 变量尾标签

 

<[var]>  解析成 <?php echo $var; ?>
<[var['key']}]>  解析成 <?php echo $var['key']; ?>
<?php
/*
	@param str $str 要替换字符串内容
	@param str $start 变量标签头
	@param str $end 变量标签尾
	@return str 解析后的字符串
 */
function tags_2_var($str,$start,$end) {
	$slashes = '#([\{\}\*\.\?\+\$\^\[\]\(\)\|\\\/])#';
	$start = preg_replace($slashes,'\\\\'.'\\1',$start);
	$end = preg_replace($slashes,'\\\\'.'\\1',$end);
	$search = '/'.$start.'([a-zA-Z0-9_\[\]\'\"\$\.]+)'.$end.'/s';
	$str = preg_replace($search, '<?php echo $\\1; ?>', $str);
	return $str;
}
$start_tags = '<[';
$end_tags = ']>';
$str = '<[var]> <br /><[var["key"]]>';
$str = tags_2_var($str,$start_tags,$end_tags);
highlight_string($str);
?>

//输出 <?php echo $var; ?> <br /><?php echo $var["key"]; ?>

 

想想还是写了三个正则了,效率都已经糟糕了,于是查了手册又写了个精简版

<?php
/*
	@param str $str 要替换字符串内容
	@param str $start 变量标签头
	@param str $end 变量标签尾
	@return str 解析后的字符串
 */
function tags_2_var($str,$start,$end) {
	$start = quotemeta($start);
	$end = quotemeta($end);
	$search = '/'.$start.'([a-zA-Z0-9_\[\]\'\"\$\.]+)'.$end.'/s';
	$str = preg_replace($search, '<?php echo $\\1; ?>', $str);
	return $str;
}
$start_tags = '{[';
$end_tags = ']}';
$str = '{[var]} <br /><[var["key"]]>';
$str = tags_2_var($str,$start_tags,$end_tags);
highlight_string($str);
?>

end。。。

 

上一篇: php计算title标题相似比   |   下一篇:php实现获取网页请求状态非get_headers» 标签: 正则 PHP正则 模板引擎 php解析

评论:

2013-01-03 10:52

有一个已经不怎么开始更新的博客

2013-01-03 18:14

回家了,一直不上网。

2012-12-13 12:52

语法当然要注意啦