什么是好的算法或至少一段代码来解析和计算一些自定义数学表达式?
例如:
abs(add(subtract(5,10),abs(add(2,4))))
再比如:
abs(add(add(2,6),subtract(7,multiply(-1,multiply(-1,5)))))
因此,计算结果为 5-10 = -5,然后 2 + 4 = 6。 6 的绝对值仅为 6。然后下一个操作是 -5 + 6 = 1,其绝对值为 1。
因此,尝试找到一种解决方案来解析这样的东西而不使用 eval((。
这是我到目前为止尝试过的。
$expr = "abs(add(subtract(5,10),abs(add(2,4))))";
$expr_array = preg_split("/(subtract'()/", $expr, NULL, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
foreach($expr_array as $key => $value) {
$value = preg_replace("/(')|'()/", "", $value);
echo $value."'n";
}
这仅呈现
阿布萨德 减去 5,10,阿布萨德2,4
但是仍然需要一个好的方法来解析它并区分每个操作数 (( 中的操作数。如果是相同的格式,那就更容易了。
我想过使用 preg_split 来解析字符串,也为操作数和数字创建单独的数组,但其中一些数字是实际的操作数,其中有数字,如 abs(add(2,4(。想法?
您可以尝试使用正则表达式和递归函数来处理它。
$pattern = '/^'s*(.+?)'s*'('s*(.+?)'s*')'s*$/';