Не избегайте того, что не нужно избегать:
return expression.matches("[-+*/^]+");
должно работать просто отлично.Большинство метасимволов регулярных выражений (.
, (
, )
, +
, *
и т. Д.) Теряют свое особое значение при использовании в классе символов.На которые нужно обратить внимание: [
, -
, ^
и ]
.И для последних трех вы можете стратегически поместить в них класс char, чтобы они не принимали своего особого значения:
^
можно размещать где угодно, кроме сразу после открывающей скобки: [a^]
-
можно разместить сразу после открывающей скобки или непосредственно перед закрывающей скобкой: [-a]
или [a-]
]
можно разместить сразу после открывающей скобки: []a]
Но для дальнейшего использования, если вам понадобится включить обратную косую черту в качестве escape-символа в строке регулярного выражения, вам нужно будет дважды ее экранировать, например:
"\\(.*?\\)" // match something inside parentheses
Таким образом, чтобы соответствовать буквальному обратному слешу, вам понадобится четыре из них:
"hello\\\\world" // this regex matches hello\world
Еще одно примечание: String.matches()
попытается сопоставить всю строку со строкойшаблон, поэтому, если ваша строка не состоит из нескольких операторов, вам нужно использовать вместо нее что-то вроде .matches(".*[-+*/^].*");
(или использовать Matcher.find()
)