Java будет обрабатывать \
внутри строки как начало escape-последовательности . Убедитесь, что вы используете \\
вместо этого (чтобы вы получили действительный символ \
в строке), и все будет в порядке.
Быстрое обновление : Как отмечает Этьен, если вы действительно хотите \
в самом RegEx, вам нужно будет использовать \\\\
, так как это приведет к \\
в строке , который будет производить \
в RegEx.
Новое обновление вопроса: Вы упоминаете, что ваш RegEx не работает, и я уверен, что это потому, что это неправильно. Если вы просто хотите убедиться, что присутствует один из классов символов каждого типа, вы можете просто создать по одному RegEx для каждого класса, а затем проверить пароль для каждого из них. Пароли в значительной степени гарантированно будут короткими (и вы можете сами это контролировать), поэтому хит перфекта должен быть минимальным.