Удаление буквенного символа в регулярном выражении - PullRequest
5 голосов
/ 15 марта 2011

У меня есть следующая строка

\Qpipe,name=office1\E

И я использую упрощенную библиотеку регулярных выражений, которая не поддерживает \Q и \E.

Я пытался удалить их

 s.replaceAll("\\Q", "").replaceAll("\\E", "")

Однако я получаю ошибку Caused by: java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 1 \E ^

Есть идеи?

Ответы [ 4 ]

14 голосов
/ 15 марта 2011

\ - это специальный escape-символ как в строке Java, так и в модуле регулярных выражений. Чтобы передать литерал \ в механизм регулярных выражений, вам нужно иметь \\\\ в строке Java. Так что попробуйте:

s.replaceAll("\\\\Q", "").replaceAll("\\\\E", "")

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

s.replace("\\Q", "").replace("\\E", "")
2 голосов
/ 22 июля 2015

Используйте функцию Pattern.quote () для экранирования специальных символов в регулярном выражении, например

s.replaceAll(Pattern.quote("\Q"), "")
1 голос
/ 15 марта 2011

replaceAll принимает строку регулярного выражения.Вместо этого просто используйте replace, который принимает буквальную строку.Так что myRegexString.replace("\\Q", "").replace("\\E", "").

Но это все еще оставляет проблему с цитированием специальных символов регулярных выражений для вашей упрощенной библиотеки регулярных выражений.

0 голосов
/ 15 марта 2011

String.replaceAll () принимает в качестве параметра регулярное выражение, поэтому вам необходимо дважды экранировать обратную косую черту:

s.replaceAll("\\\Q", "").replaceAll("\\\\E", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...