PHP-求解包含三元运算符但不带eval()的方程?

PHP-求解包含三元运算符但不带eval()的方程?,php,eval,equations,Php,Eval,Equations,我目前正在开发一个PHP应用程序,该应用程序需要求解可能有,也可能没有三元运算符的方程 例如,在替换方程式中的my变量后,剩下的字符串如下: $eq='(3.07>10-1.93*10:3.07*1.93) 我们以前使用eval()(这显然是可行的),但由于eval()的安全问题,我们从PHP类()转移到了EOS包 EOS类不解释三元运算符,我不想返回eval(),那么我在这里的选项是什么?是否有更好的PHP EOS库可供我使用?假设只有一个三元表达式,可以将字符串分解为三元表达式的单独部分,并

我目前正在开发一个PHP应用程序,该应用程序需要求解可能有,也可能没有三元运算符的方程

例如,在替换方程式中的my变量后,剩下的字符串如下:

$eq='(3.07>10-1.93*10:3.07*1.93)

我们以前使用eval()(这显然是可行的),但由于eval()的安全问题,我们从PHP类()转移到了EOS包


EOS类不解释三元运算符,我不想返回eval(),那么我在这里的选项是什么?是否有更好的PHP EOS库可供我使用?

假设只有一个三元表达式,可以将字符串分解为三元表达式的单独部分,并分别计算这些部分

$eq = '3.07 > 10 ? 1.93 * 10 : 3.07 * 1.93';

preg_match('/(.+)\?(.+):(.+)/', $eq, $parts);

if (isset($parts[3])) {
  $result = Parser::solve($parts[1]) ? Parser::solve($parts[2]) : Parser::solve($parts[3]);
} else {
  $result = Parser::solve($eq);
}
如果有不止一个三元数,如果你比我更擅长正则表达式,你可能仍然可以做到


我承认这种方法有点幼稚,我能想到各种很容易打破它的东西,例如插入式三元子表达式,但它可以适用于像你问题中的一个这样的简单例子。

三元不是数学上的东西。据我所知,它只是用于编程。您可能需要创建自己的解析器来进行计算。如果可以避免的话,我不希望构建自己的解析器。我的朋友告诉我Python中的ast.literal_eval(),这听起来很有希望,但似乎没有PHP等价物,这非常令人失望@Don't语法分析器不需要周围的()。我只是碰巧把方程输入到DB中,周围是()。为什么?我只是想知道我是否应该删掉它们以得到我的答案。但是我决定在没有它们的情况下回答这个问题。另外,如果你在Python中发现了一些可以完成这项工作的东西,但是你的主要项目是PHP,PHP可以将表达式传递给Python来计算它。@Nate,“triangal”operations/if structures也不能与ast.literal\u eval一起工作。是的,我非常感谢你的帮助,但这对我的应用程序来说太有限了。可以理解。好吧,祝你好运!如果我有更好的想法,我可能会在以后更新。