java中的正则表达式将是什么样的表达式(3 + 2)+ 23 / 12-(43/54),其中左括号是创建的,而用户将能够放右,如果左括号是没有创建比用户不能放右括号。如果左括号创建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]中为您的计算器语言建模。然后转换为您选择的词法分析器,并使用解析器对结果进行操作。