Se si desidera far corrispondere nulla, ma le lettere, si dovrebbe avere uno sguardo Unicode properties.
\p{L}
è alcun tipo di lettera da qualsiasi lingua
L'utilizzo di un maiuscola "P" invece è la negazione, in modo \P{L}
sarebbe partita tutto ciò che non è una lettera.
\d
o \p{Nd}
è la corrispondenza cifre
Quindi la tua espressione in moderno stile Unicode sarebbe simile a questa
O utilizzando una classe di caratteri negata
[^\p{L}\p{Nd}]
o negati proprietà
[\P{L}\P{Nd}]
La prossima cosa, matches()
corrisponde all'espressione sulla stringa completa, quindi l'espressione è vera solo con esattamente un carattere nella stringa. Così si avrebbe bisogno di aggiungere un quantificatore:
string.matches("[^\p{L}\p{Nd}]+")
restituisce vero, quando la stringa completa non ha solo caratteri alfanumerici e almeno uno di essi.
[^ A-Za-z0-9] .. – Pheonix