1

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

谢谢

4

3 回答 3

4

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

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

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

但是,使用其他方法很容易做您需要的事情。例如,只需遍历字符串一次,计算括号:+1for'('-1for ')'。最后计数会告诉你有多少开括号:如果计数大于零,允许用户添加右括号;否则,不要。

于 2013-03-24T11:19:42.870 回答
1

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

为此,您需要一个上下文无关语法。

另请参阅此处:

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

在“格式良好的括号”部分下。

于 2013-03-24T11:22:23.030 回答
1

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

首先以 Backus-Naur 形式 [BNF] 为您的计算器语言建模。然后翻译成您选择的词法分析器,并使用解析器对结果进行操作。

于 2013-03-24T11:34:48.117 回答