В квадратных скобках Regex []
обозначает класс символов . Класс символов может иметь два символа, разделенных дефисом a-z
для обозначения диапазона символов.
Это означает, что если используется дефис и любой конец диапазона недопустим, это недопустимый шаблон. В этом случае этот дефис должен быть экранирован, \\-
в Java.
Но, если дефис используется либо в начале , либо конце диапазона символов, то дефис не рассматривается как метасимвол - потому что он не может быть диапазоном. Таким образом, ваши другие шаблоны работают, потому что дефис эффективно экранирован.
b[] = a.split("[*/+-]"); // works fine
^ at the end
b[] = a.split("[-*]"); // works fine
^ at the start
Первое выражение имеет +-/
, что является допустимым диапазоном от +
до /
в наборе символов ASCII , что эквивалентно буквенным символам +,-./
.
Выражение с ошибкой имеет /-
, то есть диапазон от /
до SPACE
. SPACE
- это символ 32
, а /
- это символ 47
, поэтому ваш диапазон равен 47-32
, диапазон равен в обратном направлении .