Expresión regular para una cadena que no comienza con una secuencia

197

Estoy procesando un montón de tablas usando este programa , pero necesito ignorar las que comienzan con la etiqueta "tbd_". Hasta ahora tengo algo como [^ tbd_] pero eso simplemente no coincide con esos caracteres.

echoblaze
fuente
¿Cómo funciona SchemaSpy? ¿Le está pasando una lista de nombres de tabla o le está pasando una expresión regular y está haciendo la coincidencia?
Mark Biek
Estoy pasando una expresión regular (es la bandera -i) e importará las coincidencias, o eso dice en cualquier caso =)
echoblaze
44
@echoblaze: Si está procesando XML, ¿por qué no usa un analizador XML? Eso sería mucho más fácil que usar expresiones regulares.
Gumbo

Respuestas:

333

Podría usar una afirmación negativa de anticipación:

^(?!tbd_).+

O una afirmación negativa de mirar atrás:

(^.{1,3}$|^.{4}(?<!tbd_).*)

O simplemente juegos de caracteres antiguos y alternancias:

^([^t]|t($|[^b]|b($|[^d]|d($|[^_])))).*
Gumbo
fuente
66
¿Está esto restringido a algún motor regex en particular?
Mark Biek
1
Solo pregunto porque ese segundo todavía parece coincidir con tbd_ en mi prueba. Sin embargo, el primero es genial.
Mark Biek
55
Eche un vistazo a la comparación de sabores de regular-expressions.info
Gumbo
1
@Gumbo: ¿eso no debería terminar. * En lugar de. +? Una cadena que es tbd_ también comienza con eso ... por lo tanto, por definición, ¿no necesita ser seguido por otros caracteres? De lo contrario, buen ejemplo. Sin embargo, requiere un motor regex que admita lookaround.
BenAlabaster
1
@balabaster: No creo que esté buscando cadenas vacías. Pero si es así, puede cambiar eso fácilmente reemplazando el .+by.*
Gumbo