Побег специальные символы от регулярного выражения - PullRequest
1 голос
/ 17 сентября 2011

Я использую этот код:

static Pattern escaper = Pattern.compile("([^a-zA-z0-9])");

public static String escapeRE(String str) {
    return escaper.matcher(str).replaceAll("\\\\$1");
}

Работает красиво, пока я не использую эту строку: "[". Я посмотрел в отладчике результат "]" без "\\".

System.out.println(Main.escapeRE("+"));
System.out.println(Main.escapeRE(">="));
System.out.println(Main.escapeRE("]"));
System.out.println(Main.escapeRE("["));

Результат:

\\+
\\>\\=
]
[

Почему это так?

1 Ответ

7 голосов
/ 17 сентября 2011

Ваш класс персонажа [^a-zA-z0-9] неверен. Оно должно быть: [^a-zA-Z0-9] (обратите внимание на A-Z вместо A-z).

Так как [ и ] включены в диапазон A-z, они не заменяются вашим escapeRE методом.

EDIT

Как упомянул @Matt в комментариях: если вы пытаетесь избежать регулярных выражений мета-символов, взгляните на метод Pattern.quote (String) , который создан специально для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...