*, ?, +
todos los caracteres coinciden con este carácter. ¿Qué carácter significa "no" coincide con esto? Los ejemplos ayudarían.
*, ?, +
todos los caracteres coinciden con este carácter. ¿Qué carácter significa "no" coincide con esto? Los ejemplos ayudarían.
Respuestas:
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 .
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
, c
o 0
:[^a-c0]
Este último: coincide 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 +
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
, c
o 0
, mientras que [^a-c0]+
se correspondería con uno o más de cualquier cosa que no era a
, b
, c
o 0
.
^((?!foo).)+$
Coincide con cualquier línea que no contenga foo regex101.com/r/z6a65l/4
[^]
(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"
^
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>
?!
en los últimos 2 ejemplos o puede usarlo !
solo? ¿Qué hace ?
ahí?
?
para saber que es una extensión. Otros motores de expresiones regulares pueden tener sus propias reglas.