尝试在java中创建计算器时未关闭的字符类错误

时间:2018-01-27 00:38:21

标签: java regex

这个正则表达式应该将一个像2 + 2这样的字符串分成两个操作数组和运算符,但我在索引41处得到未关闭的字符类错误

"^(\\d+)?\\s*([+]|[-]|[*]|[/]|[^])?\\s*(\\d+)\\$"

1 个答案:

答案 0 :(得分:3)

你的问题是:

[^]

^字符是[ ... ]中的元字符,如果您想匹配文字"插入符号,则需要进行转义。

此外:

  • 你可能不应该在最后逃离$
  • 如果您使用Matcher.match,则不需要初始^和最终$
  • [+]|[-]|[*]|[/]|[^]等同于 1 [+\\-*/\\^]

最后,我建议不要使用正则表达式来解析表达式。一旦开始尝试支持具有2个或更多运算符的表达式,优先级,括号等正则表达式的复杂性就会失控。

更好的想法是标记化,然后将标记提供给一个简单的(基于语法的)解析器。您可以手动编写一个,也可以使用解析器生成器。或者找一个已经写过的人。 (Google for"表达式解析器java"或其他一些。)

1 - 我怀疑^在那个位置的逃避可能是多余的。不幸的是,Pattern的javadoc在时并不完全清楚,需要在^ -[]转义{{1}} 1}}