¿Hay un operador NOT en Regexes? Como en esa cadena:"(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)"
Quiero borrar todo \([0-9a-zA-z _\.\-:]*\)
, pero no aquel en el que se trata de un año: (2001)
.
Entonces, ¿la expresión regular debe devolver debe ser: (2001) name
.
NOTA: algo como \((?![\d]){4}[0-9a-zA-z _\.\-:]*\)
no funciona para mí (de (20019)
alguna manera también coincide ...)
(2001) name
.Respuestas:
No, no hay un operador no directo. Al menos no de la forma que esperas.
Sin embargo, puede usar una anticipación negativa de ancho cero:
La
(?!...)
parte significa "sólo coincide si el texto que sigue (por lo tanto: anticipado) no coincide (por lo tanto: negativo). Pero en realidad no consume los caracteres que coincide (por lo tanto: ancho cero).En realidad, hay 4 combinaciones de alternativas con 2 ejes:
fuente
\((?![\d]{4})[0-9a-zA-z _\.\-:]+\)
todavía hay(20019)
en él{4}
exterior del lookahead y en este comentario lo pones dentro : ¿cuál probaste? Además: si desea(20019)
hacer coincidir, debe agregar el\)
interior de su lookahead:\((?![\d]{4}\))[0-9a-zA-z _\.\-:]+\)
\((?![\d]{4} -->\)<--)[0-9a-zA-z _\.\-:]+\)
Entonces hay un corchete no cerrado, ¿no?)
porque quiero hacer coincidir el carácter literal)
(¡tal como lo hace al principio y al final de su expresión regular!). Luego, después de igualar eso, finalizo la búsqueda anticipada usando un archivo)
.No del todo, aunque generalmente puede utilizar alguna solución en uno de los formularios
[^abc]
, que es carácter por carácter noa
ob
oc
,a(?!b)
quea
no va seguido deb
(?<!a)b
queb
no está precedido pora
fuente
[^abc]
debería significar noa
ob
oc
, no "no la cadenaabc
".