多层if可以用正则处理吗

qiuss2 qiuss2 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


//处理if判断标签 格式为 {if:条件} axxx {else} xxxb {end if}
function Parser_IF($c,$times=0){
//return $c;
$p = '/\{if:(.+?)\}([\s\S]*?)\{end if\}/i';
preg_match_all($p, $c, $matches);
for($k=0;$k<count($matches[0]);$k++){
$value = '';
$iff = $matches[0][$k];
$conditin = $matches[1][$k];
$r = $matches[2][$k];
if(strstr($r,'{else}')){ //如果存在else
$rr = explode('{else}',$r);
$r1 = $rr[0];
$r2 = $rr[1];
$goeval = 'if('.$conditin.'){$value = "'.htmlspecialchars($r1).'";}else{$value = "'.htmlspecialchars($r2).'";}';
} else {
$goeval = 'if('.$conditin.'){$value = "'.htmlspecialchars($r).'";}';
}
//var_dump($goeval);
if(!empty($conditin)){eval($goeval);
$value = htmlspecialchars_decode($value);
} else { $value = 'if判断语句失败!';}

$c = str_ireplace($iff,$value,$c);
}
$times++; //限制循环次数
if(preg_match($p,$c,$matche) and $times<=9) { $c = Parser_IF($c,$times);} //多次循环可能存在的嵌套
return $c;
}


以上代码可以应付 {if:{field:id}>9}大于9{else}大于8小于9{end if} 这种情况

那下面这种嵌套 可有办法呢?或是别的思路?


{if:{field:id}>8}
{if:{field:id}>9}大于9{else}大于8小于9{end if} (此行可能存在 也可能只是一句话:大于8了!)
{else}
{if:{field:id}>5}大于5小于8{else}小于5{end if} (此行可能存在 也可能只是一句话:小于8了!)
{end if}

...全文

相关推荐

Python正则表达式实现截取成对括号的方法

主要介绍了Python正则表达式实现截取成对括号的方法,涉及Python正则匹配相关操作技巧,需要的朋友可以参考下

weixin_38727980

对字符串进行正则取子串

题目是这样的: 对一段HTML网页内容,解析出其中所有的键值对,比如其中type=“text”,type为属性,text为值,二者为一个键值对 内容如下: 拿到这个题,我们首先想到的是怎样遍历,怎样从头到尾的把所有子串取出来,还有如何消掉其中的符号。首先,遍历的方法想了好久,结果不大理想,代码如下,求改进: public static void main(String[] args) { String zifu = ; String zfsz[] = new String[10]; int a = 0; for (int i = 0; i &lt; zifu.length()

weixin_38614391

python里使用正则表达式的组嵌套实例详解

主要介绍了python里使用正则表达式的组嵌套实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

weixin_38680308

Shell if中的正则表达式使用详解

由于工作需要对用户提交的数据进行验证,这是一个简单的日期正则验证实例,有需要了解的同学可参考。 shell中的if语句需要做一个正则判断,查了一下语法记录之。 DATEPATTERN=^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$ if [[ $STARTDATE =~ $DATEPATTERN ]] && [[ $ENDDATE =~ $DATEPATTERN ]]; then : else echo date format is invalid! exit; fi 常用的正则表达式 if [[ $file =~ 'start' ]] 或if [[

weixin_38731075

Nginx if语句加正则表达式实现字符串截断

主要介绍了Nginx if语句加正则表达式实现字符串截断功能,特殊场合下可能会需要这个功能,NGINX的奇淫技巧之一,需要的朋友可以参考下

weixin_38545117
评论 6
收藏 已收藏
分享
返回顶部
qiuss2
基础编程 21,889 成员 140,329 内容