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.


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

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 #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.