Aby to zrobić, trzeba użyć tego wyrażenia regularnego:
foo/bar/.+?\.(?!jar).+
wyjaśnienia
Mówisz jej, co zignorować, więc to wyrażenie jest poszukiwanie rzeczy don "t chcesz.
- szukać dowolnego pliku, którego nazwa (w tym katalogu względnej) obejmuje (foo/bar /)
- wtedy szukać wszelkich znaków, które poprzedzają kropkę (. +? \. == mecz jeden lub więcej postacie o dowolnej porze, aż dojdziesz do postaci okresu)
- Następnie upewnij się, że nie ma zakończenia "jar" (?! jar) (To się nazywa negatywne spojrzenie z wyprzedzeniem
- W końcu chwytasz zakończenie ma (. +)
Ekspres zwykły jony są łatwe do zepsucia, więc zdecydowanie sugeruję, że otrzymasz narzędzie takie jak Regex Buddy, które pomoże Ci je zbudować. Spowoduje to rozbicie wyrażeń regularnych na zwykły angielski, co naprawdę pomaga.
EDIT
Hej Jason S, że mnie złapią, to nie przegap tych plików.
to poprawione regex będzie pracować dla każdego przykładu ty Wystawione:
foo/bar/(?!.*\.jar$).+
stwierdzi:
- foo/bar/baz.txt
- foo/bar/Baz
- foo/bar/jar
- foo/bar/baz.jar.txt
- foo/bar/ba z.jar.
- foo/bar/baz.
- foo/bar/baz.txt.
Ale nie znaleźliśmy
Nowy Objaśnienie
To mówi szukać plików w „foo/bar /”, to nie pasuje, jeśli istnieją zero lub więcej znaków a następnie „JAR” i to nie więcej znaków ($ oznacza koniec linii), a następnie, jeśli tak nie jest, dopasuj dowolne następne znaki.
whee! dzięki, teraz pójdę i spróbuję. –
hmm, dobry pomysł, ale nie będzie działać tak, jak stwierdzono, ponieważ nie będzie pasował do plików bez żadnego rozszerzenia. Ale myślę, że mogę go przekształcić w to, czego potrzebuję. Część 'foo/bar /' jest łatwa, więc na razie o tym zapomnijmy. Jeśli możesz to naprawić, to pasuje do plików "baz.txt", "baz", "jar", "baz.jar.txt", "baz.jar.", "Baz." I "baz.txt. " ale NIE "baz.jar", to zaakceptuję. :-) –
Hej Jason, rozumiem co masz na myśli. Właśnie zaktualizowałem swoją odpowiedź za pomocą działającego wyrażenia regularnego. Przetestowałem to na każdym wpisanym napisem. –