Java Regex表达式匹配括号内的内容

时间:2015-01-05 21:02:43

标签: java regex

我目前正在开发一个计算器项目。我正在研究词法分析器。我的目的是创建一个可以接受输入的计算器,例如

5+3

4*8

3*(4+2)

并回答答案。我正在尝试创建可以将它们拆分为标记的正则表达式。我想将括号中的表达式拆分为单个标记,稍后将以递归方式解析。我能够正确地匹配我的数字和运算符,但我不能让它用于我的括号表达式。这是我目前的正则表达式:

String tokenPatterns ="(?<NUMBER>-?[0-9]+\\.[0-9]+|-?[0-9]+)" //match any integer or decimal number
            + "|(?<OPERATOR>\\+|-|/|\\*)" //match operators     
            + "|(?<UNIT>in|pt)" //match a few units
            + "|(?<WHITESPACE>\\S+)" //match whitespace - is just discarded later, most likely unnecessary
            + "|(?<PAREN>\\([^\\n]*\\))"; //match any character series in parentheses, excluding newline

除了括号之外,我对所有这些测试都取得了成功。我的理解是,我为括号编写的内容应该匹配:

打开括号后跟任意数量的任何字符,不包括换行符后跟近括号

但是当我给它输入-34 *(5 + 2)时,它只匹配-34和/.

有人有解释或提示吗?如果您需要更多背景信息或澄清,请告诉我,我会尽快回复。谢谢!

0 个答案:

没有答案