多层if可以用正则处理吗
//处理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正则匹配相关操作技巧,需要的朋友可以参考下
对字符串进行正则取子串
题目是这样的: 对一段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 < zifu.length()
python里使用正则表达式的组嵌套实例详解
主要介绍了python里使用正则表达式的组嵌套实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
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 [[
Nginx if语句加正则表达式实现字符串截断
主要介绍了Nginx if语句加正则表达式实现字符串截断功能,特殊场合下可能会需要这个功能,NGINX的奇淫技巧之一,需要的朋友可以参考下


基础编程