Подтвердить что ты не робот

Как избежать квадратной скобки для компиляции шаблонов

У меня есть список регулярных выражений, разделенных запятыми:

.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]

Я сделал разбивку на запятую. Теперь я пытаюсь сопоставить это регулярное выражение с сгенерированным паролем. Проблема в том, что Pattern.compile не любит квадратные скобки, которые не экранированы. Может кто-нибудь, пожалуйста, дайте мне простую функцию, которая принимает строку следующим образом: [0-9] и возвращает экранированную строку \[0-9\].

4b9b3361

Ответ 2

По какой-то причине вышеупомянутый ответ не сработал у меня. Для тех, кто любит меня, вот что я нашел.

Я ожидал, что одна косая черта исчезнет, ​​но вы должны использовать два, если у вас есть шаблон, хранящийся в строке. Первая обратная косая черта пропускает вторую строку в строке, так что видимое регулярное выражение \]. Поскольку регулярное выражение просто видит одну обратную косую черту, она использует его для выхода из квадратной скобки.

\\] 

В регулярном выражении это будет соответствовать одной закрывающей квадратной скобке.

Если вы пытаетесь сопоставить новую строку, например, хотя бы вы использовали только одну обратную косую черту. Вы используете шаблон escape строки для вставки символа новой строки в строку. Regex не видит \n - он видит символ новой строки и соответствует этому. Вам нужны две обратные косые черты, потому что это не строка escape-последовательности, это последовательность escape-регекса.

Ответ 3

Вы можете использовать специальные символы \Q и\E... что-либо между \Q и\E автоматически экранируется.

\Q[0-9]\E

Ответ 4

Pattern.compile() любит квадратные скобки просто отлично. Если вы берете строку

".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]"

и разделите его на запятые, вы получите пять абсолютно правильных регулярных выражений: первый соответствует восьми символам без строки, второй соответствует значению ASCII и т.д. Если вы действительно не хотите сопоставлять строки, такие как ".{8}" и "[0-9]", я не понимаю, почему вам нужно что-то избегать.