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


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 .


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.


^((?!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


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>

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.