> 백엔드 개발 > PHP 튜토리얼 > 求熟悉正则的给个判断方法解决办法

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

WBOY
풀어 주다: 2016-06-13 10:16:24
원래의
989명이 탐색했습니다.

求熟悉正则的给个判断方法
我写了个函数
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>
로그인 후 복사
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>
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿