仅用正则表达式去分析数学表达式有一定的困难。这个例子不一定能识别所有的可能
<?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;
?>