2011-05-08 9 views

Respuesta

59

Puede usar clases de caracteres negadas para excluir ciertos caracteres: por ejemplo, [^abcde] hará coincidir cualquier cosa excepto los caracteres a, b, c, d, e.

En lugar de especificar todos los personajes, literalmente, puede utilizar taquigrafías dentro de las clases de caracteres: [\w] (en minúsculas) coincidirá con cualquier carácter "palabra" (letras, números y guión bajo), [\W] (mayúsculas) coincidirá con nada pero la palabra caracteres; del mismo modo, [\d] coincidirá con los dígitos 0-9, mientras que [\D] coincide con cualquier cosa que no sean los dígitos 0-9, y así sucesivamente.

Si utiliza PHP puede echar un vistazo al regex character classes documentation.

6

^ utilizado al comienzo de un rango de caracteres, o negativas aserciones lookahead/lookbehind.

>>> re.match('[^f]', 'foo') 
>>> re.match('[^f]', 'bar') 
<_sre.SRE_Match object at 0x7f8b102ad6b0> 
>>> re.match('(?!foo)...', 'foo') 
>>> re.match('(?!foo)...', 'bar') 
<_sre.SRE_Match object at 0x7f8b0fe70780> 
+0

¿Tiene que usar '?!' En los últimos 2 ejemplos o puede simplemente usar '!' Por sí mismo ? ¿Qué hace '?' Hacer allí? –

+0

Python necesita el '?' Para decir que es una extensión. Otros motores de expresiones regulares pueden tener sus propias reglas. –

+0

@Click: Es bastante estándar. http://www.regular-expressions.info/refadv.html, también la mayoría de los manuales del motor regexp dicen lo mismo. – Amadan

56

Hay dos maneras de decir "no coinciden": rangos de caracteres, y de anchura cero negativo de búsqueda hacia delante/búsqueda hacia atrás.

El primero: no coinciden a, b, c o 0: [^a-c0]

Este último: coincidirá con cualquier cadena de tres letras, excepto foo y bar:

(?!foo|bar).{3}

o

.{3}(?<!foo|bar)

Además, una corrección para usted: *, ? y + en realidad no coinciden con nada. Son operadores de repetición, y siempre siguen un operador coincidente. Por lo tanto, significa a+ partido de uno o más de a, [a-c0]+ significa partido de uno o más de a, b, c o 0, mientras [^a-c0]+ coincidiría con uno o más de cualquier cosa que no era a, b, c o 0.

30

[^] (a menos de []) es la negación en expresión regular mientras que ^ es "comienzo de cadena"

[^a-z] partidos cualquier carácter individual que es no de "a" a "z"

^[a-z] significa de cadena comienza con "a" a la "z"

Reference

Cuestiones relacionadas