online - regex python
Regex: coincide con todo, pero (7)
Necesito una expresión regular capaz de hacer coincidir todo, excepto una cadena que comienza con un patrón específico (específicamente index.php
y lo que sigue, como index.php?id=2342343
)
¿Qué tal si no usas Regex?
// In PHP
0 !== strpos($string, ''index.php'')
En Python:
>>> import re
>>> p=''^(?!index/.php/?[0-9]+).*$''
>>> s1=''index.php?12345''
>>> re.match(p,s1)
>>> s2=''index.html?12345''
>>> re.match(p,s2)
<_sre.SRE_Match object at 0xb7d65fa8>
No soy un experto en expresiones regulares, pero creo que podrías usar un lookahead negativo desde el principio, por ejemplo ^(?!foo).*$
No debería coincidir con nada que comience con foo
.
Puede poner ^
en el comienzo de un conjunto de caracteres para que coincida con cualquier cosa que no sean esos caracteres.
[^=]*
coincidirá todo pero =
Regex: combina todo pero :
- una cadena que comienza con un patrón específico (por ejemplo, cualquier - vacío, también - cadena que no comienza con
foo
):- Solución basada en la búsqueda anticipada para NFA:
- Solución basada en clase de carácter negada para motores regex que no admiten soluciones alternativas :
- una cadena que termina con un patrón específico (digamos, no
world.
al final):- Solución basada en Lookbehind:
- Solución POSIX:
- una cadena que contiene un texto específico (por ejemplo, no coincide con una cadena que tiene
foo
) (sin patern compatible con POSIX, lo siento): - una cadena que contiene un carácter específico (por ejemplo, evite hacer coincidir una cadena que tenga un
|
símbolo): - una cadena igual a una cadena (digamos, no igual a
foo
):- Basado en lookaround:
- POSIX:
- una secuencia de caracteres :
- PCRE (coincide con cualquier texto excepto
cat
):/cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i
o/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is
- Otros motores que permiten "lookarounds":
(cat)|[^c]*(?:c(?!at)[^c]*)*
At(cat)|[^c]*(?:c(?!at)[^c]*)*
(o(?s)(cat)|(?:(?!cat).)*
, o(cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*
) y luego verifique con el idioma significa: si el Grupo 1 coincide, no es lo que necesitamos; de lo contrario, tome el valor del partido si no está vacío
- PCRE (coincide con cualquier texto excepto
- un cierto carácter individual o un conjunto de caracteres :
- Utilice una clase de carácter negada : [^a-z]+ (cualquier carácter que no sea una letra ASCII en minúscula)
- Coincidencia de cualquier char (s) pero
|
:[^|]+
Nota demo : la nueva línea /n
se usa dentro de las clases de caracteres negadas en demostraciones para evitar el desbordamiento de coincidencia a la (s) línea (s) vecina (s). No son necesarios cuando se prueban cadenas individuales.
Nota de anclaje : en muchos idiomas, use /A
para definir el inicio no ambiguo de la cadena, y /z
(en Python, es /Z
, en JavaScript, $
está OK) para definir el final de la cadena.
Nota de puntos : en muchos sabores (pero no en POSIX, TRE, TCL),. coincide con cualquier char, pero con un carácter nuevo. Asegúrese de utilizar un modificador DOTALL correspondiente ( /s
en PCRE / Boost / .NET / Python / Java y /m
en Ruby) para .
para que coincida con cualquier char incluyendo una nueva línea.
Nota de retroceso : en los idiomas en los que debe declarar patrones con cadenas C que permiten secuencias de escape (como /n
para una línea nueva), debe doblar las barras diagonales que escapan de caracteres especiales para que el motor los trate como caracteres literales (por ejemplo, en Java world/.
se declarará como "world//."
, o usará una clase de caracteres: "world[.]"
). Utilice literales de cadena sin formato (Python r''/bworld/b''
), C # literal literales de cadena @"world/."
, o notaciones literales slashy strings / regex como /world/./
.
Simplemente /^index/.php/
coincidir /^index/.php/
luego rechace lo que corresponda.
grep -v en shell
! ~ en perl
Agregue más en otros idiomas: marqué esto como Wiki de la comunidad.