Регулярное выражение Java - PullRequest
       0

Регулярное выражение Java

2 голосов
/ 06 февраля 2011

Я хочу заменить любой из этих символов:

% \ , [ ] # & @ ! ^

... пустой строкой ("").

Я использовал этот код:

String line = "[ybi-173]";
Pattern cleanPattern = Pattern.compile("%|\\|,|[|]|#|&|@|!|^");
Matcher matcher = cleanPattern.matcher(line);
line = matcher.replaceAll("");

Но это не работает.

Что мне не хватает в этом регулярном выражении?

Ответы [ 3 ]

4 голосов
/ 06 февраля 2011

Некоторые символы являются специальными символами, которые интерпретируются по-разному.Вы можете либо избежать их всех с помощью обратной косой черты, либо, что еще лучше, поместить их в класс символов (нет необходимости экранировать символы не-CC, что облегчает чтение):

Pattern cleanPattern = Pattern.compile("[%\\\\,\\[\\]#&@!^]");
3 голосов
/ 06 февраля 2011

Существует несколько причин, по которым ваше решение не работает.

Несколько символов, которым вы хотите соответствовать, имеют специальные значения в регулярных выражениях, включая ^, [ и ].Они должны быть экранированы с помощью символа \, но, что еще хуже, сам \ должен быть экранирован, чтобы компилятор Java передавал \ в конструктор регулярных выражений.Итак, чтобы подвести итог первого шага, если вы хотите соответствовать символу ], строка Java должна выглядеть как "\\]".

Но, кроме того, это относится к классам символов [],а не оператор чередования |.Если вы хотите сопоставить "любой из символов a, b, c, это выглядит как [abc]. Ваш класс символов будет [%\,[]#&@!^], но из-за правил экранирования строки Java и специальныхзначение определенных символов, ваше регулярное выражение будет [%\\\\,\\[\\]#&@!\\^].

0 голосов
/ 06 февраля 2011

Вы определяете свой шаблон как группу символов, заключенную в [ и ], и экранируете специальные символы, например

String n = "%\\,[]#&@!^".replaceAll("[%\\\\,\\[\\]#&@!^]", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...