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

WBOY
Libérer: 2016-06-13 10:16:24
original
964 Les gens l'ont consulté

求熟悉正则的给个判断方法
我写了个函数
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);}<br><font color="#e78608">------解决方案--------------------</font><br>
Copier après la connexion
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);<div class="clear">
                 
              
              
        
            </div>
Copier après la connexion
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal