Java RegEx - недопустимая точка - PullRequest
3 голосов
/ 30 ноября 2011
String filter = "a-zA-Z0-9äöüÄÖÜß-\\.";
"^[^" + filter + "]*$", ""

inputtext.replaceAll("^[^" + filter + "]*$", "");

Этот фильтр Java RegEx должен удалить все символы из входного текста, кроме символов в фильтре, но я получаю исключение, которое говорит, что точка не разрешена. Я уже избежал точки с двумя косыми чертами. Что не так?

Ответы [ 3 ]

7 голосов
/ 30 ноября 2011

Переместите - в конец:

String filter = "a-zA-Z0-9äöüÄÖÜß.-";

Тире указывает диапазон символов, а точка не является допустимым концом диапазона.Вы также не хотите определять диапазон там.Перемещение до конца решает проблему.

Кстати.если вы хотите удалить все символы, которые не соответствуют вашему фильтру, вам нужно изменить замену:

inputtext = inputtext.replaceAll("[^" + filter + "]", "");

так, как вы это делаете, он заменит только если все символы не входят в этот класс.

1 голос
/ 30 ноября 2011

Проблема не в точке останова (точка) в вашем регулярном выражении, а в минусе перед ним.Если вы избежите этого, все будет работать лучше:

String filter = "a-zA-Z0-9äöüÄÖÜß\\-\\.";

С другой стороны: я не уверен, что использование самого первого и самого последнего символа, который вы используете в своем регулярном выражении, дает желаемый эффект.Может быть, вы должны удалить их?

1 голос
/ 30 ноября 2011

У меня нормально работает:

    String str = "afjlajfdl;f2.3232A,&^%DFDF-";
    System.out.println(str.replaceAll("[^a-zA-Z0-9-.]", ""));

И производит вывод:

afjlajfdlf2.3232ADFDF-

Как правило, вы не должны экранировать . в [], а для шаблона замены не следует указывать начало и конец строки (^, $), а также мультиплексор *.

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