Regulärer Ausdruck für eine Zeichenfolge, die nicht mit einer Sequenz beginnt

196

Ich verarbeite eine Reihe von Tabellen mit diesem Programm , aber ich muss diejenigen ignorieren, die mit der Bezeichnung "tbd_" beginnen. Bisher habe ich so etwas wie [^ tbd_], aber das passt einfach nicht zu diesen Zeichen.

Echoblaze
quelle
Wie funktioniert SchemaSpy? Übergeben Sie ihm eine Liste mit Tabellennamen oder übergeben Sie ihm einen regulären Ausdruck und es wird der Abgleich durchgeführt?
Mark Biek
Ich übergebe einen regulären Ausdruck (es ist das -i-Flag) und es importiert die Übereinstimmungen, oder so heißt es auf jeden Fall =)
echoblaze
4
@echoblaze: Wenn Sie XML verarbeiten, warum verwenden Sie keinen XML-Parser? Das wäre viel einfacher als die Verwendung regulärer Ausdrücke.
Gumbo

Antworten:

332

Sie könnten eine negative Vorausschau-Behauptung verwenden:

^(?!tbd_).+

Oder eine negative Rückblick-Behauptung:

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

Oder einfach nur alte Zeichensätze und Alternativen:

^([^t]|t($|[^b]|b($|[^d]|d($|[^_])))).*
Gumbo
quelle
6
Ist dies auf bestimmte Regex-Engines beschränkt?
Mark Biek
1
Ich frage nur, weil dieser zweite in meinem Test immer noch mit tbd_ übereinstimmt. Der erste ist allerdings großartig.
Mark Biek
5
Werfen Sie einen Blick auf den Geschmacksvergleich von reguläre Ausdrücke.info
Gumbo
1
@Gumbo - sollte das nicht enden. * Statt. +? Eine Zeichenfolge, die tbd_ ist, beginnt auch damit ... also müssen per Definition keine anderen Zeichen folgen? Ansonsten gutes Beispiel. Es ist jedoch eine Regex-Engine erforderlich, die Lookaround unterstützt.
BenAlabaster
1
@balabaster: Ich glaube nicht, dass er nach leeren Saiten sucht. Aber wenn ja, kann er das leicht ändern, indem er den .+by.*
Gumbo