Jeśli chcesz dopasować niczego oprócz liter, należy zajrzeć do Unicode properties.
\p{L}
jest każdy rodzaj pisma z dowolnego języka
Korzystanie z wielkiej litery „P”, a nie jest to negacja, więc \P{L}
będzie pasować do wszystkiego, co nie jest literą.
\d
lub \p{Nd}
jest dopasowanie cyfry
Więc wyrażenie w nowoczesnym stylu Unicode wyglądałby następująco
albo za pomocą zanegowane klasa znaków
[^\p{L}\p{Nd}]
lub negowane właściwości
[\P{L}\P{Nd}]
Następną sprawą jest, że matches()
dopasowuje wyrażenie do całego łańcucha, więc wyrażenie jest prawdziwe tylko z dokładnie jednym znakiem w ciągu znaków. Więc trzeba by dodać kwantyfikator:
string.matches("[^\p{L}\p{Nd}]+")
zwraca true, gdy kompletny ciąg ma tylko non znaki alfanumeryczne oraz co najmniej jeden z nich.
[^ A-Za-z0-9] .. – Pheonix