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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.