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]中为您的计算器语言建模。 然后转换为您选择的词法分析器,并使用解析器对结果进行操作。