Expressão regular para uma sequência que não inicia com uma sequência

197

Estou processando várias tabelas usando este programa , mas preciso ignorar as que começam com o rótulo "tbd_". Até agora, tenho algo como [^ tbd_], mas que simplesmente não corresponde a esses caracteres.

echoblaze
fonte
Como o SchemaSpy funciona? Você está passando uma lista de nomes de tabelas ou um regex e está fazendo a correspondência?
Mark Biek
Eu estou passando um regex (é o flag -i) e ele vai importar as partidas, ou assim diz em qualquer caso =)
echoblaze
4
@echoblaze: Se você está processando XML, por que não usa um analisador XML? Isso seria muito mais fácil do que usar expressões regulares.
Gumbo

Respostas:

333

Você pode usar uma afirmação de antecipação negativa:

^(?!tbd_).+

Ou uma afirmação negativa:

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

Ou simplesmente conjuntos de caracteres antigos e alternações:

^([^t]|t($|[^b]|b($|[^d]|d($|[^_])))).*
quiabo
fonte
6
Isso é restrito a algum mecanismo regex específico?
Mark Biek
1
Só pergunto porque o segundo ainda parece corresponder a tbd_ no meu teste. O primeiro é ótimo.
Mark Biek
5
Dê uma olhada em comparação sabor de regular-expressions.info: regular-expressions.info/refflavors.html
Gumbo
1
@Gumbo - isso não deve terminar. * Em vez de. +? Uma string que é tbd_ também começa com isso ... portanto, por definição, não precisa ser seguida por nenhum outro caractere? Caso contrário, bom exemplo. No entanto, é necessário um mecanismo de expressão regular que ofereça suporte à pesquisa.
BenAlabaster
1
@balabaster: Eu não acho que ele esteja procurando por cordas vazias. Mas se assim for, ele pode facilmente mudar isso substituindo o .+by.*
Gumbo #