Java 正则表达式字符类中的非法转义字符
我正在尝试确定传递到我的表达式类中的表达式是否具有运算符。分别用于加法、减法、乘法、除法和指数。+-*/^
此代码有什么问题?
private static boolean hasOperator(String expression)
{
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
另一个注意事项:将尝试将整个字符串与模式进行匹配,因此除非您的字符串仅由一堆运算符组成,否则您需要使用类似的东西(或使用 Matcher.find()
String.matches()
.matches(".*[-+*/^].*");
)