Java Scientific Calculator正则表达式

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

谢谢

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

正则表达式只能匹配所谓的常规语言 ,匹配嵌套结构需要更通用的正式语言 。

请参阅可以使用正则表达式来匹配嵌套模式吗?

但是,使用其他方法很容易做到你需要的东西。 例如,只需迭代字符串一次,计算括号: +1代表'('-1代表')' 。 最后,计数将告诉您有多少个空括号:如果计数大于零,则允许用户添加右括号; 否则,不要。

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

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

另见:

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

在“格式良好的parantheses”部分。

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

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

Interesting Posts