preg_replace_callback 怎么替换preg_replace

 我来答
圣鸾OJ
2015-09-10 · TA获得超过1629个赞
知道小有建树答主
回答量:1136
采纳率:96%
帮助的人:109万
展开全部
自问自答~~~~~~~~~~~~~~thinkphp3.2 git代码,看下官方怎么写.......
/**
* TagLib库解析
* access public
* @param string $tagLib 要解析的标签库
* @param string $content 要解析的模板内容
* @param boolen $hide 是否隐藏标签库前缀
* return string
*/
public function parseTagLib($tagLib,&$content,$hide=false) {
$begin = $this->config['taglib_begin'];
$end = $this->config['taglib_end'];
$className = 'TagLib'.ucwords($tagLib);
$tLib = Think::instance($className);
$that = $this;
foreach ($tLib->getTags() as $name=>$val){
$tags = array($name);
if(isset($val['alias'])) {// 别名设置
$tags = explode(',',$val['alias']);
$tags[] = $name;
}
$level = isset($val['level'])?$val['level']:1;
$closeTag = isset($val['close'])?$val['close']:true;
foreach ($tags as $tag){
$parseTag = !$hide? $tagLib.':'.$tag: $tag;// 实际要解析的标签名称
if(!method_exists($tLib,'_'.$tag)) {
// 别名可以无需定义解析方法
$tag = $name;
}
$n1 = empty($val['attr'])?'(\s*?)':'\s([^'.$end.']*)';
$this->tempVar = array($tagLib, $tag);
if (!$closeTag){
if ( version_compare(PHP_VERSION,'5.3.0')<0 ) {
$patterns = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/eis';
$replacement = "\$this->parseXmlTag('$tagLib','$tag','$1','')";
$content = preg_replace($patterns, $replacement,$content);
}else{
$patterns = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/is';
$content = preg_replace_callback($patterns, function($matches) use($tagLib,$tag,$that){
return $that->parseXmlTag($tagLib,$tag,$matches[1],$matches[2]);
},$content);
}
}else{
if ( version_compare(PHP_VERSION,'5.3.0')<0 ) {
$patterns = '/'.$begin.$parseTag.$n1.$end.'(.*?)'.$begin.'\/'.$parseTag.'(\s*?)'.$end.'/eis';
$replacement = "\$this->parseXmlTag('$tagLib','$tag','$1','$2')";
for($i=0;$i<$level;$i++)
$content=preg_replace($patterns,$replacement,$content);
}else{
$patterns = '/'.$begin.$parseTag.$n1.$end.'(.*?)'.$begin.'\/'.$parseTag.'(\s*?)'.$end.'/is';
for($i=0;$i<$level;$i++) {
$content=preg_replace_callback($patterns,function($matches) use($tagLib,$tag,$that){
return $that->parseXmlTag($tagLib,$tag,$matches[1],$matches[2]);
},$content);
}
}
}
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友eab39c9
2014-03-02 · TA获得超过104个赞
知道小有建树答主
回答量:164
采纳率:33%
帮助的人:118万
展开全部
用模式e
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式