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。。。
评论:
有一个已经不怎么开始更新的博客
回家了,一直不上网。
语法当然要注意啦