这个正则表达式应该将一个像2 + 2这样的字符串分成两个操作数组和运算符,但我在索引41处得到未关闭的字符类错误
"^(\\d+)?\\s*([+]|[-]|[*]|[/]|[^])?\\s*(\\d+)\\$"
答案 0 :(得分:3)
你的问题是:
[^]
^
字符是[
... ]
中的元字符,如果您想匹配文字"插入符号,则需要进行转义。
此外:
$
。Matcher.match
,则不需要初始^
和最终$
[+]|[-]|[*]|[/]|[^]
等同于 1 至[+\\-*/\\^]
。最后,我建议不要使用正则表达式来解析表达式。一旦开始尝试支持具有2个或更多运算符的表达式,优先级,括号等正则表达式的复杂性就会失控。
更好的想法是标记化,然后将标记提供给一个简单的(基于语法的)解析器。您可以手动编写一个,也可以使用解析器生成器。或者找一个已经写过的人。 (Google for"表达式解析器java"或其他一些。)
1 - 我怀疑^
在那个位置的逃避可能是多余的。不幸的是,Pattern
的javadoc在时并不完全清楚,需要在^
-
内[
和]
转义{{1}} 1}}