Java - экранирование метасимволов [и] в Regex - PullRequest
3 голосов
/ 26 октября 2011

Я пытаюсь заменить первое вхождение строки "[]" в другой строке:

aString.replaceFirst ("[]", "blah");

Я получаюошибка: java.util.regex.PatternSyntaxException: Незакрытый класс символов рядом с индексом 1 []

[и], очевидно, являются метасимволами, однако, когда я пытаюсь экранировать их с \ eclipse, жалуется, что это недопустимоescape escape.

Я посмотрел, но не смог найти, что мне не хватает?

Спасибо

Ответы [ 3 ]

5 голосов
/ 26 октября 2011

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

Конечно, это очень утомительно, что еще хуже, потому что регулярные выражения имеют массу таких последовательностей побегов.Вот почему Java-регулярные выражения также поддерживают «цитирование» литеральных частей шаблона, и это позволяет вам записать свой шаблон следующим образом: \\Q[]\\E.

РЕДАКТИРОВАТЬ: поскольку другой ответ намекает на: java.util.regex.Pattern.quote() выполняет это переносмежду \\Q и \\E.

4 голосов
/ 26 октября 2011

Попробуйте \\ [и \\].Вы должны удвоить escape, потому что \ также является escape-символом для строк (как \ ", когда вы хотите иметь двойные кавычки в вашем тексте). Поэтому, чтобы получить \ в вашей строке, вы должны использовать \\.

2 голосов
/ 26 октября 2011
aString.replaceFirst("\\[\\]", "blah");

или в более общем случае

aString.replaceFirst(java.util.regex.Pattern.quote("[]"), "blah");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...