在java中为数学表达式使用正则表达式?

在java中为数学表达式使用正则表达式?,java,regex,math,expression,Java,Regex,Math,Expression,我正在处理这个正则表达式 ((([(]?[-]?[0-9]*[.]?[0-9]+)+([\/\+\-\*])+)+([0-9]*[.]?[0-9]+[)]?)+[\+\-\*\/]?([0-9]*)*)+ 我需要这个来接受任何表达式,比如:(2+2*7)-4+2/(5-3)+2 我想避免这样的表达:(2+3)-或2+2-(2+3 我们的目标是从用户那里获取表达式并将其分解为标记,但在此之前,我想检查输入的有效性。在最一般的形式中,可以描述。另一方面,数学公式通常形式化为,这是正则语言的超集。我

我正在处理这个正则表达式

((([(]?[-]?[0-9]*[.]?[0-9]+)+([\/\+\-\*])+)+([0-9]*[.]?[0-9]+[)]?)+[\+\-\*\/]?([0-9]*)*)+
我需要这个来接受任何表达式,比如:
(2+2*7)-4+2/(5-3)+2

我想避免这样的表达:
(2+3)-或2+2-(2+3


我们的目标是从用户那里获取表达式并将其分解为标记,但在此之前,我想检查输入的有效性。

在最一般的形式中,可以描述。另一方面,数学公式通常形式化为,这是正则语言的超集。我们要明确这一区别:正则表达式语言是类型3,而上下文无关的语言是更一般的类型2

直观地说,这里的关键区别在于,常规语言无法计数,因此它们无法平衡左括号和右括号。可以使用有限状态自动机来检测常规语言,但仅使用有限数量的状态,您不可能跟踪到目前为止看到的左括号的数量,因为可能有可以是任意数量的


您可能需要研究a和a之间的区别。通常,您会使用前者和正则表达式将流标记为数字、运算符等,而使用后者来构建和检查由这些标记组成的表达式。

可以用它们最一般的形式来描述。另一方面,math f公式通常形式化为,这是常规语言的超集。规则语言是类型3,而上下文无关语言是更一般的类型2

直观地说,这里的关键区别在于,常规语言无法计数,因此它们无法平衡左括号和右括号。可以使用有限状态自动机来检测常规语言,但仅使用有限数量的状态,您不可能跟踪到目前为止看到的左括号的数量,因为可能有可以是任意数量的


您可能需要研究a和a之间的区别。通常,您会使用前者和正则表达式将流标记为数字、运算符等,而使用后者来构建和检查由这些标记组成的表达式。

可以用它们最一般的形式来描述。另一方面,math f公式通常形式化为,这是常规语言的超集。规则语言是类型3,而上下文无关语言是更一般的类型2

直观地说,这里的关键区别在于,常规语言无法计数,因此它们无法平衡左括号和右括号。可以使用有限状态自动机来检测常规语言,但仅使用有限数量的状态,您不可能跟踪到目前为止看到的左括号的数量,因为可能有可以是任意数量的


您可能需要研究a和a之间的区别。通常,您会使用前者和正则表达式将流标记为数字、运算符等,而使用后者来构建和检查由这些标记组成的表达式。

可以用它们最一般的形式来描述。另一方面,math f公式通常形式化为,这是常规语言的超集。规则语言是类型3,而上下文无关语言是更一般的类型2

直观地说,这里的关键区别在于,常规语言无法计数,因此它们无法平衡左括号和右括号。可以使用有限状态自动机来检测常规语言,但仅使用有限数量的状态,您不可能跟踪到目前为止看到的左括号的数量,因为可能有可以是任意数量的


您可能需要研究a和a之间的区别。通常,您会使用前者和正则表达式将流标记为数字、运算符等,而使用后者来构建和检查由这些标记组成的表达式。

数学符号主要是上下文无关文法,这是(不是不可能,但是)使用正则表达式实现非常困难。如果令牌与产品不匹配,为什么不抛出一个错误呢?不要为此使用正则表达式。使用正则表达式基本上是为了检查它们是否有正确数量的分隔符
?@Qantas940什么?不可能!数学符号主要是上下文无关语法,这是(不是不可能,但是)使用正则表达式实现非常困难。如果令牌与产品不匹配,为什么不抛出一个错误呢?不要为此使用正则表达式。使用正则表达式基本上是为了检查它们是否有正确数量的分隔符
?@Qantas940什么?不可能!数学符号主要是上下文无关语法,这是(不是不可能,但是)使用正则表达式实现非常困难。如果令牌与产品不匹配,为什么不抛出一个错误呢?不要为此使用正则表达式。使用正则表达式基本上是为了检查它们是否有正确数量的分隔符
?@Qantas940什么?不可能!数学符号主要是上下文无关语法,这是(不是不可能,但是)使用正则表达式实现非常困难。如果令牌与产品不匹配,为什么不抛出一个错误?不要为此使用正则表达式。使用正则表达式基本上是为了检查它们是否有正确数量的分隔符
?@qantas94what?这是不可能的!