Использование NOT в Regex в replaceAll - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть эта строка:

String a = "$$bar$55^$$";

Я хочу удалить все символы.Я делаю регулярное выражение:

String b = a.replaceAll("(?<=[^[\\p{Alpha}][\\p{Digit}]])", "");

Но я получаю:

$$bar$55^$$

Но я хочу получить эту строку:

bar55

Что я делаю не так?Как я могу отфильтровать все символы, кроме букв и цифр?

В Oracle у меня это работает:

select regexp_replace('$$bar$55^$$','[^[:alpha:][:digit:]]*') from dual;

1 Ответ

0 голосов
/ 08 февраля 2019

Вы используете обходной путь, который является непотребляющим шаблоном, т. Е. Значение соответствия всегда будет пустым, поскольку будет сопоставляться только место внутри строки.Используйте

String b = a.replaceAll("\\P{Alnum}+", "");

Шаблон \\P{Alnum}+ соответствует одному или нескольким символам, отличным от буквенно-цифровых символов ASCII.Также см. Предопределенные классы символов .

В качестве альтернативы, вы можете использовать

String b = a.replaceAll("[^\\p{L}\\p{P}\\p{S}]+", "");

Это удалит куски из 1 или более символов, кроме букв Юникода, знаков пунктуации и символов..

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