2012-03-19 20 views
14

Estoy tratando de escribir una validación de cadena para que coincida con cualquier carácter (regular, dígito y especial) excepto =.Uso de expresiones regulares para que coincida con cualquier carácter excepto =

Aquí es lo que he escrito -

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"); 

embargo, que coincide con la cadena de entrada "2009-09/09 12: 23: 12.5 =" con el patrón.

¿Cómo puedo excluir = (o cualquier otro carácter, para el caso) de la cadena del patrón?

+0

¿Qué estás tratando de hacer coincidir? (o no)? simplemente [^ =] * coincidirá con cualquier cosa que no sea el carácter '='. –

+1

No puede anidar clases de caracteres. '[[]' es simplemente una clase de caracteres que consiste en el caracter simple '['. – tripleee

Respuesta

30

Si el único carácter prohibido es el signo igual, algo como [^=]* debería funcionar.

[^...] es una clase de caracteres negados; coincide con un solo carácter que es cualquier carácter, excepto uno de la lista entre corchetes. * repite la expresión cero o más veces.

4

Si solo desea comprobar la aparición de "=", ¿por qué no utiliza el método String indexOf()?

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

'contiene' es más corto, más fácil de entender y no necesita juguetear con los índices. – phihag

7

En primer lugar, no necesita una expresión regular. Simplemente llame contains:

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

La expresión regular correcta que buscas es sólo

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

Si su objetivo es no tener ningún carácter = en su cadena, intenta lo siguiente

String patternString = "[^=]*"; 
Cuestiones relacionadas