¿Qué operador de expresión regular significa 'No' coincide con este carácter?

89

*, ?, +todos los caracteres coinciden con este carácter. ¿Qué carácter significa "no" coincide con esto? Los ejemplos ayudarían.

Haga clic en Upvote
fuente
Para obtener una solución relacionada con no coincidir con una palabra, consulte aquí stackoverflow.com/questions/406230
null

Respuestas:

88

Puede usar clases de caracteres negadas para excluir ciertos caracteres: por ejemplo [^abcde], coincidirá con cualquier carácter menos a, b, c, d, e.

En lugar de especificar todos los caracteres literalmente, puede utilizar abreviaturas dentro de las clases de caracteres: [\w](minúsculas) coincidirá con cualquier "carácter de palabra" (letra, números y guión bajo), [\W](mayúscula) coincidirá con cualquier cosa menos caracteres de palabra; de manera similar, [\d]coincidirá con los dígitos 0-9 mientras que [\D]coincide con cualquier cosa menos con los dígitos 0-9, y así sucesivamente.

Si usa PHP, puede echar un vistazo a la documentación de clases de caracteres de expresiones regulares .

Paolo Stefan
fuente
80

Hay dos formas de decir "no coincide": rangos de caracteres y búsqueda anticipada / retrospectiva negativa de ancho cero.

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

Este último: coincide con cualquier cadena de tres letras excepto fooy bar:

(?!foo|bar).{3}

o

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

Además, una corrección para usted: *, ?y +no representa realmente a nada. Son operadores de repetición y siempre siguen un operador de coincidencia. Por lo tanto, a+los medios coinciden con uno o más de a, [a-c0]+medios coinciden con uno o más de a, b, co 0, mientras que [^a-c0]+se correspondería con uno o más de cualquier cosa que no era a, b, co 0.

Amadan
fuente
^((?!foo).)+$Coincide con cualquier línea que no contenga foo regex101.com/r/z6a65l/4
Levi Baguley
48

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

[^a-z] coincide con cualquier carácter que no sea de la "a" a la "z"

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

Referencia

diEcho
fuente
8

^ se utiliza al principio de un rango de caracteres o afirmaciones de búsqueda anticipada / retrospectiva negativas.

>>> 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>
Ignacio Vázquez-Abrams
fuente
¿Tiene que usar ?!en los últimos 2 ejemplos o puede usarlo !solo? ¿Qué hace ?ahí?
Haga clic en Upvote
Python necesita ?para saber que es una extensión. Otros motores de expresiones regulares pueden tener sus propias reglas.
Ignacio Vazquez-Abrams
@Click: Es bastante estándar. regular-expressions.info/refadv.html , también la mayoría de los manuales del motor regexp dicen lo mismo.
Amadan