Expression régulière pour une chaîne qui ne commence pas par une séquence

197

Je traite un tas de tableaux à l'aide de ce programme , mais je dois ignorer ceux qui commencent par l'étiquette "tbd_". Jusqu'à présent, j'ai quelque chose comme [^ tbd_] mais qui ne correspond tout simplement pas à ces caractères.

écho
la source
Comment fonctionne SchemaSpy? Lui passez-vous une liste de noms de table ou lui passez-vous un regex et il fait la correspondance?
Mark Biek
Je passe une expression régulière (c'est le drapeau -i) et il importera les correspondances, ou alors ça dit dans tous les cas =)
echoblaze
4
@echoblaze: Si vous traitez du XML, pourquoi n'utilisez-vous pas un analyseur XML? Ce serait beaucoup plus facile que d'utiliser des expressions régulières.
Gumbo

Réponses:

333

Vous pouvez utiliser une assertion d'anticipation négative:

^(?!tbd_).+

Ou une assertion négative:

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

Ou tout simplement de vieux jeux de caractères et alternances:

^([^t]|t($|[^b]|b($|[^d]|d($|[^_])))).*
Gombo
la source
6
Est-ce limité à des moteurs regex particuliers?
Mark Biek
1
Je demande seulement parce que ce second semble toujours correspondre à tbd_ dans mon test. Le premier est génial cependant.
Mark Biek
5
Jetez un œil à la comparaison de saveurs de regular-expressions.info
Gumbo
1
@Gumbo - cela ne devrait-il pas se terminer. * Au lieu de. +? Une chaîne qui est tbd_ commence également par cela ... donc par définition, n'a pas besoin d'être suivi par d'autres caractères? Sinon, bon exemple. Il fait besoin d' un moteur de regex qui supports lookaround bien.
BenAlabaster
1
@balabaster: Je ne pense pas qu'il cherche des chaînes vides. Mais si c'est le cas, il peut facilement changer cela en remplaçant le .+par.*
Gumbo