Вы можете использовать вычитание символов здесь:
String pat = "[\\p{Punct}&&[^@',&]]";
Весь шаблон представляет класс символов, [...]
, который содержит \p{Punct}
Класс символов POSIX , оператор пересечения &&
и [^...]
Класс символов с отрицанием .
Модификатор Unicode может потребоваться, если вы планируетечтобы также соответствовать всем знакам препинания Unicode:
String pat = "(?U)[\\p{Punct}&&[^@',&]]";
^^^^
Шаблон соответствует любой пунктуации (с \p{Punct}
), кроме @
, '
, ,
и &
.
Если вам нужно исключить больше символов, добавьте их в класс отрицанных символов.Просто не забывайте всегда экранировать -
, \
, ^
, [
и ]
внутри класса / набора символов Java regex.Например, добавление обратной косой черты и -
может выглядеть как "[\\p{Punct}&&[^@',&\\\\-]]"
или "[\\p{Punct}&&[^@',&\\-\\\\]]"
.
Демонстрация Java :
String value = "#`~!#$%^,";
String pattern = "(?U)[\\p{Punct}&&[^@',&]]";
Pattern r = Pattern.compile(pattern); // Create a Pattern object
Matcher m = r.matcher(value); // Now create matcher object.
while (m.find()) {
System.out.println("Found value: " + m.group());
}
Вывод:
Found value: #
Found value: !
Found value: #
Found value: %
Found value: ,