字符类中的Java正则表达式非法转义字符

字符类中的Java正则表达式非法转义字符,java,regex,Java,Regex,我试图确定传入表达式类的表达式是否有运算符。分别用于加、减、乘、除和指数的+-*/^ 这个代码有什么问题 private static boolean hasOperator(String expression) { return expression.matches("[\+-\*/\^]+"); } 我原以为我已正确转义了特殊字符,但在尝试编译时,我不断收到错误:“非法转义字符” 谢谢你的帮助。不要逃避不需要逃避的事情: return expression.matches("[-+

我试图确定传入表达式类的表达式是否有运算符。分别用于加、减、乘、除和指数的
+-*/^

这个代码有什么问题

private static boolean hasOperator(String expression)
{
    return expression.matches("[\+-\*/\^]+");
}
我原以为我已正确转义了特殊字符,但在尝试编译时,我不断收到错误:“非法转义字符”


谢谢你的帮助。

不要逃避不需要逃避的事情:

return expression.matches("[-+*/^]+");
应该很好用。大多数正则表达式元字符(
+
*
等)在字符类中使用时会失去其特殊意义。您需要注意的是
[
-
^
]
。对于最后三个,您可以战略性地将它们放在char类中,这样它们就不会有特殊的含义:

  • ^
    可以放置在任何位置,除了在开口支架的正后方:
    [a^]
  • -
    可放置在打开支架的正后方或关闭支架的正前方:
    [-a]
    [a-]
  • ]
    可以放在开口支架的正后方:
    []a]
但为了便于将来参考,如果需要在正则表达式字符串中包含反斜杠作为转义字符,则需要对其转义两次,例如:

"\\(.*?\\)" // match something inside parentheses
因此,要匹配文字反斜杠,需要四个:

"hello\\\\world" // this regex matches hello\world

另一个注意事项:
String.matches()
将尝试根据模式匹配整个字符串,因此除非您的字符串仅由一组运算符组成,否则您需要使用类似于
.matches(“.[-*/^].*)”的内容替代(或使用)