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.


¿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($|[^_])))).*

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
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.