Regex для квадратных скобок
Пытаюсь сделать регулярку для спец символов: ',', '.' и т.д. Но как быть с "[" и "]"?
Моя регулярка выглядит так: String[] clean = input.split("[(),. !?:;]");
И если туда вписать квадратные скобки, то все ломается.
Ответы (2 шт):
Примерно вот так:
String[] clean = input.split("[\\(\\)\\,\\.\\[\\] \\!\\?\\:\\;]");
Причем хочу обратить внимание, что ., ? (,) - это тоже спец. символы зарезервированные RegExp, поэтому их тоже нужно экранировать обратным слешем.
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("[(),. !?:;\\[\\]]");