首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在java中为数学表达式使用正则表达式?

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

Stack Overflow用户
提问于 2013-10-19 16:29:46
回答 1查看 1.2K关注 0票数 0

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

代码语言:javascript
运行
复制
((([(]?[-]?[0-9]*[.]?[0-9]+)+([\/\+\-\*])+)+([0-9]*[.]?[0-9]+[)]?)+[\+\-\*\/]?([0-9]*)*)+

我需要它来接受任何表达式,比如:(2+2*7)-4+2/(5-3)+2

并且我想避免这样的表达式:(2+3)- or 2+2-(2+3

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

EN

回答 1

Stack Overflow用户

发布于 2013-10-21 18:14:32

在最一般的形式中,regular expressions可以描述regular languages。另一方面,数学公式通常被形式化为context-free languages,它是常规语言的超集。Chomsky hierarchy明确了这一区别:常规语言是类型3,而上下文无关的语言是更通用的类型2。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19464077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档