2009-07-20 19 views
35

¿Es posible hacer una negación de cadenas en expresiones regulares? Necesito hacer coincidir todas las cadenas que no contengan la cadena "..". Sé que puede usar ^[^\.]*$ para hacer coincidir todas las cadenas que no contengan "." pero necesito hacer coincidir más de un carácter. Sé que simplemente podría hacer coincidir una cadena que contenga ".." y luego anular el valor de retorno de la coincidencia para lograr el mismo resultado, pero me pregunté si sería posible.Negación de cadena usando expresiones regulares

+0

Vinculado: [Expresiones regulares y negación de un grupo de caracteres completo] (http://stackoverflow.com/questions/977251/regular-expressions-and-negating-a-whole-character-group) – Unihedron

Respuesta

42

Puede utilizar los símbolos de anticipación negativos:

^(?!.*\.\.).*$ 

que causa la expresión de no coincide si se puede encontrar una secuencia de dos períodos en cualquier lugar de la cadena.

+6

Ah, habilidades de edición ninja :) +1 –

5
^(?:(?!\.\.).)*$ 

solo coincidirán si no hay dos puntos consecutivos en ninguna parte de la cadena.

Cuestiones relacionadas