2012-03-19 15 views
14

Sto provando a scrivere una convalida di stringa per corrispondere a qualsiasi carattere (normale, numerico e speciale) tranne =.Uso di espressioni regolari per corrispondere a qualsiasi carattere eccetto =

Ecco quello che ho scritto -

String patternString = "[[^=][\\w\\s\\W]]*"; 
    Pattern p = Pattern.compile(patternString); 
    Matcher m = p.matcher(str); 

    if(m.matches()) 
     System.out.println("matches"); 
    else 
     System.out.println("does not"); 

Ma, corrisponde la stringa di input "2009-09/09 12: 23: 12.5 =" con il modello.

Come posso escludere = (o qualsiasi altro carattere, per quella materia) dalla stringa del modello?

+0

Cosa stai cercando di abbinare? (o no)? solo [^ =] * corrisponderà a qualsiasi cosa tranne il carattere '='. –

+1

Non è possibile nidificare le classi di caratteri. '[[]' è semplicemente una classe di caratteri costituita dal singolo carattere '['. – tripleee

risposta

30

Se l'unico carattere vietato è il segno di uguale, qualcosa come [^=]* dovrebbe funzionare.

[^...] è una classe di caratteri negata; corrisponde a un singolo carattere che è qualsiasi carattere tranne uno dall'elenco tra parentesi quadre. * ripete l'espressione zero o più volte.

4

Se si desidera verificare l'occorrenza di "=" perché non si utilizza il metodo String indexOf()?

if str.indexOf('=') //... 
+6

'contains' è più breve, più facile da capire e non è necessario giocare con gli indici. – phihag

7

Prima di tutto, non è necessario un regexp. Basta chiamare contains:

if(str.contains("=")) 
    System.out.println("does not"); 
else 
    System.out.println("matches"); 

la correttezza espressione regolare che stai cercando è solo

String patternString = "[^=]*"; 
1

Se il vostro obiettivo è quello di non avere alcun = caratteri di stringa, prova a seguire

String patternString = "[^=]*"; 
Problemi correlati