Regex для квадратных скобок

Пытаюсь сделать регулярку для спец символов: ',', '.' и т.д. Но как быть с "[" и "]"?

Моя регулярка выглядит так: String[] clean = input.split("[(),. !?:;]");

И если туда вписать квадратные скобки, то все ломается.


Ответы (2 шт):

Автор решения: viiprogrammer

Примерно вот так:

String[] clean = input.split("[\\(\\)\\,\\.\\[\\] \\!\\?\\:\\;]");

Подробнее: ТыЦ и Тыц

Причем хочу обратить внимание, что ., ? (,) - это тоже спец. символы зарезервированные RegExp, поэтому их тоже нужно экранировать обратным слешем.

→ Ссылка
Автор решения: Stanislav Volodarskiy

Java использует последовательности \Q, \E чтобы обозначить участок регулярного выражения, который должен работать как есть, как он написан. Между ними точка это только точка, а звёздочка - только звёздочка и ничего больше. Это относится ко всем специальным символам. Помните что по правилам Java обратные слеши нужно удваивать:

String[] clean = input.split("[\\Q(),. !?:;[]\\E]");

Кроме ручного кодирования в Java есть специальный метод, который превращает строку в литеральное регулярное выражение:

// Pattern.quote(String s)
String[] clean = input.split("[" + Pattern.quote("(),. !?:;[]") + "]");

Если вам нужно экранировать один-два символа, то используйте обратные слеши. Но только там где это необходимо. В вашем примере (в описании символьного класса) символы [] экранировать надо, а ().?, !:; не обязательно. Без справочника тут не обойтись:

String[] clean = input.split("[(),. !?:;\\[\\]]");
→ Ссылка