Java中的模式匹配

时间:2010-01-11 08:30:37

标签: java regex math

我正在开发能够计算任何给定数学表达式差异的java程序。 当用户键入表达式Sin(Cos(x^2))时,我需要检查它是否在数学上有效。 当然,我们可以通过手动编写代码来完成,但这将是繁琐的工作。 我可以使用java的正则表达式包吗?

如何??

感谢名单..

6 个答案:

答案 0 :(得分:10)

不,正则表达式还不够......(事实上,这可以通过数学证明)。

要解析数学表达式,您可以编写自己的解析器(实际上并不那么难)或使用现有的解析器,例如Jep

以下是解析数学表达式的一些以前的SO问题:

Best algorithm for evaluating a mathematical expression?

Reading and running a mathematical expression in Python

Evaluating mathematical expressions

答案 1 :(得分:6)

JEval是一个不错的选择,因为JEP现在已获得商业许可。

答案 2 :(得分:2)

如果您尝试接受任何数学表达式,则regex将不适合您。

您将需要使用解析器来检查您的表达式,并根据指定的数学语法确定其是否有效。

有很多antlr

答案 3 :(得分:2)

如果您想自己编码,那么您可以使用广泛用于此目的的Polish notation

答案 4 :(得分:1)

另一种选择是JScience库。抽象类Function包含differentiate()方法,该方法是针对离散,多项式和有理函数实现的。

答案 5 :(得分:0)

计算机代数系统(例如Mathematica)使用如下的规则符号来区分:

  D[Cos[x_],y_]:=(-1)*Sin[x]*D[x,y]
  D[Sin[x_],y_]:=Cos[x]*D[x,y]

这些转换规则有时也被称为“模式匹配规则”,但它们与字符串的正则表达式模式匹配无关。 有关详细信息,请参阅Introduction to Patterns

我知道这些开源Java项目,它们包含类似的模式匹配规则引擎: