Wyrażenie regularne dla łańcucha, który nie zaczyna się od sekwencji

197

Przetwarzam kilka tabel za pomocą tego programu , ale muszę zignorować te, które zaczynają się od etykiety „tbd_”. Do tej pory mam coś takiego jak [^ tbd_], ale to po prostu nie pasuje do tych znaków.

echoblaze
źródło
Jak działa SchemaSpy? Czy przekazujesz mu listę nazw tabel, czy podajesz wyrażenie regularne i dopasowuje się?
Mark Biek
Mijam wyrażenie regularne (jest to flaga -i) i zaimportuje dopasowania, a
przynajmniej
4
@echoblaze: Jeśli przetwarzasz XML, dlaczego nie używasz parsera XML? Byłoby to o wiele łatwiejsze niż używanie wyrażeń regularnych.
Gumbo

Odpowiedzi:

334

Możesz użyć negatywnego stwierdzenia dotyczącego przyszłości:

^(?!tbd_).+

Lub negatywne stwierdzenie:

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

Lub po prostu stare zestawy znaków i alternatywy:

^([^t]|t($|[^b]|b($|[^d]|d($|[^_])))).*
Gumbo
źródło
6
Czy jest to ograniczone do konkretnych silników regex?
Mark Biek
1
Pytam tylko dlatego, że ten drugi wydaje się w moim teście pasować do tbd_. Pierwszy jest jednak świetny.
Mark Biek
5
Spójrz na porównanie smaków regular-expressions.info
Gumbo
1
@Gumbo - czy to nie powinno się kończyć. * Zamiast. +? Ciąg, który jest tbd_, również zaczyna się od tego ... dlatego z definicji nie musi następować po nim żaden inny znak? W przeciwnym razie dobry przykład. Wymaga to jednak silnika wyrażeń regularnych, który obsługuje przeglądanie.
BenAlabaster
1
@balabaster: Nie sądzę, żeby szukał pustych łańcuchów. Ale jeśli tak, to może on łatwo zmienić poprzez zastąpienie .+przez.*
Gumbo