2010-06-03 22 views
21

Me estoy golpeando la cabeza contra la pared con una expresión regular. Estoy tratando de definir una expresión que excluya exactamente este texto 'Sistema' (no distingue entre mayúsculas y minúsculas), pero puede contener la palabra 'Sistema' siempre que no sea solo eso.Regex no igual a la cadena

Ejemplos:

  • del sistema == NO VÁLIDA
  • SISTEMA == NO VÁLIDA sistema
  • == NO VÁLIDA
  • Sistema == NO VÁLIDA
  • asd Sistema == Válido Sistema
  • asd asd == Válido
  • Sistema asd == Válido
  • sistema ASD == Válido
  • asd == Válido

Respuesta

38

Prueba esto:

^(?!system$) 

O esto para que coincida con la línea entera:

^(?!system$).*$ 

La expresión regular tiene un efecto negativo look-ahead en su comienzo, que no concuerda si "system" es toda la cadena.

+0

Sólo por curiosidad, ¿cómo el?! trabajo del operador? Nunca he usado ese (aunque usé casi todo Regex, suelo encontrar soluciones que no usan "no"). – Alxandr

+1

¡Ahh, tan simple! ¡Estoy seguro de que intenté eso ...! Gracias. – Kieron

+1

@Alxandr - verifica lo que sigue a su posición actual. Por ejemplo, 'c (?! 4)' coincidirá con c de 'Doc12', pero no con c en' Doc42'. Un vistazo no captura, así que no tengo que preocuparme por reemplazar el dígito, o verificar el borde del caso (por ejemplo, si c fuera el último caracter: 'Doc'). – Kobi

4

Rechazar si coincide con ^system$ (asegúrese de que la bandera i esté ENCENDIDA).

+0

Esta debería ser la primera opción o curso. Naturalmente (y posiblemente erróneamente) asumí que OP no puede hacerlo. – Kobi

1
^$|^.{1-5}$|.{7}|^[^s]|^.[^y]|^..[^s]|^...[^t]|[^e].$|[^m]$ 

Pero use la respuesta de amarghosh si puede.

(actualizado según la sugerencia a continuación)

+0

Probablemente quiso decir '. {1,5}'. – Kobi

+0

heh, escribí eso sin probarlo. Estoy algo sorprendido de que realmente haya funcionado al primer intento. Las dos primeras cláusulas son redundantes, así que: (^. {1-6} $) | (. {8}) | (^ [^ s]) | (^. [^ Y]) | (^ .. [^ s]) | (^ ... [^ t]) | ([^ e]. $) | ([^ m] $) Buen consejo sobre?! sin embargo, no había oído hablar de eso. –

+0

oops. esa expresión regular permite a través de "systuem". (y falla en una cadena vacía, ¿qué es aparentemente aceptable?) prueba: ^ $ | ^. {1-5} $ |. {7} |^[^ s] | ^. [^ y] |^.. [^ s] |^... [^ t] | [^ e]. $ | [^ m] $ –