欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

求熟悉正则的给个判断方法解决办法

程序员文章站 2022-05-22 11:33:20
...
求熟悉正则的给个判断方法
我写了个函数
autoConv( $string , $a=array() )
{
eval('$res='.$string.';');
return($res);
}
功能就是根据字符串所组成的表达式自动计算,其中$array的作用比较特殊,是字符串表达式中可能含有数组元素。

比如:
autoConv( 'a[1]+a[2]-a[3]' , array(0,10,20,30) )

返回结果 10+20-30 = 0

啰嗦了这么多,希望各位看明白了,这里有个问题需要判断,就是传递过来的字符串表达式是否有未被赋值的元素。

比如:
autoConv( 'a[1]+a[2]-a[3]+a[4]' , array(0,10,20,30) )
其中没有a[4]的值

其实这个函数是处理数据库中读取的数据,并根据第一个参数字符串表达式来计算,如果遇到没有赋值的情况,只要单独读取一下数据库

由于整个系统设计的原因,有时候不可避免要出现默认传递的数组没有包含字符串表达式所需的所有数组元素的情况,这时候需要先判断出是哪个值没有,然后单独去读数据库,而这个判断我无法写出,感谢各位帮忙~!
比如
'(a[1]+a[2])/2 * a[3] - a[4]'这样的字符串表达式,有a[1] a[2] a[3] a[4] 这样4个参数,如何判断出来,感谢感谢!!




------解决方案--------------------
如果有嵌套,分析挺难的

这样行不行

ob_start();
eval("……");
$res = ob_get_contents();
ob_clean();

判断$res里有没有报错信息
------解决方案--------------------
是这个意思吧?
PHP code
function autoConv( $string , $a=array() ) {  preg_match_all('/\[(\d+)\]/', $string, $r);  $t = array_diff($r[1], array_keys($a));  if($t) return '缺少数据项: ' . join(',', $t);  $string = str_replace('a', '$a', $string);  eval('$res='.$string.';');  return($res);}
------解决方案--------------------
PHP code
//板门弄斧头一下function auto(){    $arg=func_get_args();    preg_match_all("/(%d)/i",$arg[0],$rs);    $parttern=$arg[0];    array_shift($arg);    $arglist=join(",",$arg);     eval("\$string=sprintf('$parttern',$arglist);");    eval("echo $string;");     }   auto("%d*%d*%d-%d",1,2,9,4);  auto("%d*%d*%d-%d",10,2,9,4);
求熟悉正则的给个判断方法解决办法

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频