Ответ 1
Не избегайте того, чего не нужно избегать:
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()
)