Java Regex在字符类中的非法转义字符
我正在尝试确定传递给我的Expressions类的表达式是否有运算符。 +-*/^
用于加,减,乘,除和指数。
这段代码有什么问题?
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(".*[-+*/^].*");
相反(或使用Matcher.find()
)