仅用正则表达式去分析数学表达式有一定的困难。这个例子不一定能识别所有的可能
<?php
$p = array (
  array("/ +/",""),
  array("/[0-9a-z]+/i","expr"),
  array("/expr[-*+\/]{1}expr/","expr"),
  array("/\(expr\)/","expr")
);
foreach($p as $v) {
  $p0[] = $v[0];
  $p1[] = $v[1];
}
$s = "(aaa + (bbb-ccc))*ddd/eee"; // 正确的
$s = "(aaa ++ (bbb-ccc))*ddd/eee"; // 错误的
do {
  $o = $s;
}while(($s = preg_replace($p0,$p1,$o))!= $o);
if($o != "expr")
  echo "不是合法的数学表达式";
echo $o;
?>

解决方案 »

  1.   

    是复杂,有点像匹配html标签,关注
      

  2.   

    to  xizi2002(☆☆戏☆子☆☆) 
    我想unix兼容系统下的lex、yacc把编译方法表现的很好了。如果自己写很难写出这样只有数十k的代码。
    我是快退休的人了,我期望看到新一代的成长!
      

  3.   

    to xuzuning(唠叨) 
    谢了
    你的代码正在测试中~请稍等~