Существует несколько причин, по которым ваше решение не работает.
Несколько символов, которым вы хотите соответствовать, имеют специальные значения в регулярных выражениях, включая ^
, [
и ]
.Они должны быть экранированы с помощью символа \
, но, что еще хуже, сам \
должен быть экранирован, чтобы компилятор Java передавал \
в конструктор регулярных выражений.Итак, чтобы подвести итог первого шага, если вы хотите соответствовать символу ]
, строка Java должна выглядеть как "\\]"
.
Но, кроме того, это относится к классам символов []
,а не оператор чередования |
.Если вы хотите сопоставить "любой из символов a
, b
, c
, это выглядит как [abc]
. Ваш класс символов будет [%\,[]#&@!^]
, но из-за правил экранирования строки Java и специальныхзначение определенных символов, ваше регулярное выражение будет [%\\\\,\\[\\]#&@!\\^]
.