21,886
社区成员
发帖
与我相关
我的任务
分享
/*转意对正则表达式有影响的字符,例如:<{}>转义\<\{\}\>*/
$Left=preg_quote($this->Delimiter_Left);
$Right=preg_quote($this->Delimiter_Right);
$pattern=array(
/*1.替换模板中的变量*/
'/'.$Left.'\s*\$([A-Za-z0-9_]*)\s*'.$Right.'/i',
/*2.匹配模板中的if*/
'/'.$Left.'\s*if\s*(.+?)\s*'.$Right.'(.+?)'.$Left.'\s*\/if\s*'.$Right.'/is'
);
$replacement=array(
/*1.替换模板中的普通变量*/
'<?php echo $this->tpl_Vars["${1}"];?>',
/*2.替换模板中的if字符串*/
'这是IF字段',
);
/*开始替换模板文件中的标签*/
$this->Template_HTML=preg_replace($pattern,$replacement,$this->Template_HTML);
return $this->Template_HTML;
/*转意对正则表达式有影响的字符,例如:<{}>转义\<\{\}\>*/
$Left=preg_quote($this->Delimiter_Left);
$Right=preg_quote($this->Delimiter_Right);
$pattern=array(
/*1.替换模板中的变量*/
'/'.$Left.'\s*\$([A-Za-z0-9_]*)\s*'.$Right.'/i',
/*2.匹配模板中的if*/
'/'.$Left.'\s*if\s*(.+?)\s*'.$Right.'(.+?)'.$Left.'\s*\/if\s*'.$Right.'/ies'
);
$replacement=array(
/*1.替换模板中的普通变量*/
'<?php echo $this->tpl_Vars["${1}"];?>',
/*2.替换模板中的if字符串*/
'$this->stripvtags(\'<?php if(${1}) { ?>\',\'${2}<?php } ?>\')',
);
/*开始替换模板文件中的标签*/
$this->Template_HTML=preg_replace($pattern,$replacement,$this->Template_HTML);
return $this->Template_HTML;
修正一下,论坛修改不了内容真麻烦。
/*转意对正则表达式有影响的字符,例如:<{}>转义\<\{\}\>*/
$Left=preg_quote($this->Delimiter_Left);
$Right=preg_quote($this->Delimiter_Right);
$pattern=array(
/*1.替换模板中的变量*/
'/'.$Left.'\s*\$([A-Za-z0-9_]*)\s*'.$Right.'/i',
/*2.匹配模板中的if*/
'/'.$Left.'\s*if\s*(.+?)\s*'.$Right.'(.+?)'.$Left.'\s*\/if\s*'.$Right.'/is'
);
$replacement=array(
/*1.替换模板中的普通变量*/
'<?php echo $this->tpl_Vars["${1}"];?>',
/*2.替换模板中的if字符串*/
'$this->stripvtags(\'<?php if(${1}) { ?>\',\'${2}<?php } ?>\')',
);
/*开始替换模板文件中的标签*/
$this->Template_HTML=preg_replace($pattern,$replacement,$this->Template_HTML);
return $this->Template_HTML;
前面一段代码贴错了,这个应该接近原代码。其实原码是《细说PHP》中简易模板类中的一段代码,我是想照着仿写个用于自己程序的模板类。/*转意对正则表达式有影响的字符,例如:<{}>转义\<\{\}\>*/
$Left=preg_quote($this->Delimiter_Left);
$Right=preg_quote($this->Delimiter_Right);
$pattern=array(
/*1.替换模板中的变量*/
'/'.$Left.'\s*\$([A-Za-z0-9_]*)\s*'.$Right.'/i',
/*2.匹配模板中的if*/
'/'.$Left.'\s*if\s*(.+?)\s*'.$Right.'(.+?)'.$Left.'\s*\/if\s*'.$Right.'/ies'
);
$replacement=array(
/*1.替换模板中的普通变量*/
'<?php echo $this->tpl_Vars["${1}"];?>',
/*2.替换模板中的if字符串*/
'这是IF字段',
);
/*开始替换模板文件中的标签*/
$this->Template_HTML=preg_replace($pattern,$replacement,$this->Template_HTML);
return $this->Template_HTML;
大概是第八行。我已经用preg_replace_callback('参数一',function($matches){},'参数3')的方式成功进行了普通变量的替换。但当把参数2的回调函数写在外面,作为类的方法时,调用就错误,是我不会用吧。
Public Function tpl_Replace(){
/*转意对正则表达式有影响的字符,例如:<{}>转义\<\{\}\>*/
$Left=preg_quote($this->Delimiter_Left);
$Right=preg_quote($this->Delimiter_Right);
$pattern=array(
/*1.替换模板中的变量*/
'/'.$Left.'\s*\$([A-Za-z0-9_]*)\s*'.$Right.'/i',
/*2.匹配模板中的if*/
'/'.$Left.'\s*if\s*(.+?)\s*'.$Right.'(.+?)'.$Left.'\s*\/if\s*'.$Right.'/is'
);
$replacement=array(
/*1.替换模板中的普通变量*/
'<?php echo $this->tpl_Vars["${1}"];?>',
/*2.替换模板中的if字符串*/
'这是IF字段',
);
/*开始替换模板文件中的标签*/
//$this->Template_HTML=preg_replace($pattern,$replacement,$this->Template_HTML);
$this->Template_HTML=preg_replace_callback($pattern,function($matches){
/*1.替换模板中的普通变量*/
$replacement=$this->tpl_Vars[$matches[1]];
return $replacement;
},$this->Template_HTML);
return $this->Template_HTML;
}
与之前不同的是PHP是写在函数内,之前/e模式PHP代码是写在字符串内,这是本质区别吧。似乎感觉麻烦了许多。
当把回调函数写在外面,作为类的方法时,调用就出现错误,是我还没摸到门路。
Public Function callback($matches){
$replacement=$this->tpl_Vars[$matches[1]];
return $replacement;
}