Java Scientific Calculator正则表达式

时间:2013-03-24 11:14:42

标签: java regex arithmetic-expressions integer-arithmetic

java中的正则表达式将是什么样的表达式(3 + 2)+ 23 / 12-(43/54),其中左括号是创建的,而用户将能够放右,如果左括号是没有创建比用户不能放右括号。如果左括号创建3次比用户将只能右括号3次只关闭左括号打开的表达式。

由于

3 个答案:

答案 0 :(得分:4)

简而言之,使用标准正则表达式是不可能的。

正则表达式只能匹配regular languages所谓的匹配,匹配的嵌套结构需要a more general type formal language

请参阅Can regular expressions be used to match nested patterns?

然而,使用其他方法完成所需操作非常容易。例如,只需迭代字符串一次,计算括号:+1'('-1')'。最后,计数将告诉您有多少个空括号:如果计数大于零,则允许用户添加右括号;否则,不要。

答案 1 :(得分:1)

这不是你能用正则表达式表达的东西。

你需要一个无上下文语法。

另见:

http://en.wikipedia.org/wiki/Context-free_grammar

在“格式良好的parantheses”一节下。

答案 2 :(得分:1)

您最好的选择是使用词法分析器和解析器。在Java世界中,最受欢迎的是ANTLR和JavaCC。

首先在Backus-Naur Form [BNF]中为您的计算器语言建模。然后转换为您选择的词法分析器,并使用解析器对结果进行操作。