Punteggiatura Regex in Java

Per prima cosa, leggo la documentazione come segue

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

E voglio trovare qualsiasi carattere di punteggiatura ECCETTO @ ‘, ma non lo capisco.

Qui è :

public static void main( String[] args ) { // String to be scanned to find the pattern. String value = "#`~!#$%^"; String pattern = "\\p{Punct}[^@',&]"; // Create a Pattern object Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); // Now create matcher object. Matcher m = r.matcher(value); if (m.find()) { System.out.println("Found value: " + m.groupCount()); } else { System.out.println("NO MATCH"); } } 

Il risultato è NESSUNA PARTITA.
C’è qualche disallineamento?

Grazie
MRizq

Stai abbinando due caratteri, non uno. Utilizzare un lookahead (negativo) dovrebbe risolvere il problema:

 (?![@',&])\\p{Punct} 

Puoi usare la sottrazione dei personaggi qui:

 String pat = "[\\p{Punct}&&[^@',&]]"; 

L’intero modello rappresenta una class di caratteri, [...] , che contiene una class di carattere POSIX di \p{Punct} , l’ operatore di intersezione && e la class di caratteri [^...] negata .

Un modificatore Unicode potrebbe essere necessario se si intende anche abbinare la punteggiatura Unicode:

 String pat = "(?U)[\\p{Punct}&&[^@',&]]"; ^^^^ 

Il pattern corrisponde a qualsiasi segno di punteggiatura (con \p{Punct} ) tranne @ , ' \p{Punct} e & .

Se hai bisogno di escludere più personaggi, aggiungili alla class di caratteri negata. Ricordati sempre di escape - , \ , ^ , [ e ] all’interno di una class / set di caratteri regex Java. Ad esempio aggiungendo una barra rovesciata e - potrebbe apparire come "[\\p{Punct}&&[^@',&\\\\-]]" o "[\\p{Punct}&&[^@',&\\-\\\\]]" .

Demo 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()); } 

Produzione:

 Found value: # Found value: ! Found value: # Found value: % Found value: ,