我目前正在开发一个计算器项目。我正在研究词法分析器。我的目的是创建一个可以接受输入的计算器,例如
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和/.
有人有解释或提示吗?如果您需要更多背景信息或澄清,请告诉我,我会尽快回复。谢谢!