字符类中的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(“.[-*/^].*)”的内容代码>替代(或使用)