下面是一个php模板解析函数,这些正则表达式都是些什么意思,看起来很辛苦,请高手指点一下,先谢谢啦!
- function parse_template($template,$cacheFile='')
- {
- $content = file_get_contents($template);
- $content = preg_replace('//{/*([^/{/}]*)/*/}/','',$content);
- $content = preg_replace('//$([A-Za-z0-9_]+)/','$set[/'//1/']',$content);
- $content = preg_replace('//$/[([A-Za-z0-9_]+)/]/','$//1',$content);
- $content = preg_replace('//{/$([A-Za-z0-9_/[/]/'"]+)/}/','<? echo $//1; ?>',$content);
- $content = preg_replace('//{include/(([^/{/}]+)/)/}/','<? include //1; ?>',$content);
- $content = preg_replace('//{echofile/(([^/{/}]+)/)/}/','<? echo file_get_contents(//1); ?>',$content);
- $content = preg_replace('//{code/(([^/{/}]+)/)/}/','<? //1; ?>',$content);
- $content = preg_replace('//{if/(([^/{/}]+)/)/}/','<? if (//1) { ?>',$content);
- $content = preg_replace('//{elseif/(([^/{/}]+)/)/}/','<? } elseif(//1) { ?>',$content);
- $content = preg_replace('//{while/(([^/{/}]+)/)/}/','<? while (//1) { ?>',$content);
- $content = preg_replace('//{foreach/(([^/{/}]+)/)/}/','<? foreach (//1) { ?>',$content);
- $content = str_replace(array('{else}','{/if}','{/while}','{/foreach}'),array('<? }else{ ?>','<? } ?>','<? } ?>','<? } ?>'),$content);
- if (preg_match_all('//{template/(([^/{/}]+)/)/}/',$content,$tplName))
- {
- foreach ($tplName[1] as $value) $tplContent[] = parse_template(eval('return '.$value.';'));
- $content = str_replace($tplName[0],$tplContent,$content);
- }
- if ('' == $cacheFile) return $content;
- @file_put_contents($cacheFile,'<? true===$inTemplate || exit(/'非法访问!/'); ?>'.$content);
- }