Для этого вам нужно использовать это регулярное выражение:
foo/bar/.+?\.(?!jar).+
Объяснение
Вы говорите, что игнорировать, поэтому это выражение ищет то, что вы не хотите.
- Вы ищете любой файл, имя которого (включая относительный каталог) включает (foo / bar /)
- Затем вы ищите любые символы, предшествующие точке (. +? \. == соответствуют одному или нескольким символам любого времени, пока вы не достигнете символа точки)
- Затем убедитесь, что у него нет окончания "jar" (?! Jar) (это называется отрицательным взглядом вперед
- Наконец вы берете окончание, которое у него есть (. +)
Регулярные выражения легко испортить, поэтому я настоятельно рекомендую вам воспользоваться инструментом, подобным Regex Buddy , который поможет вам построить их. Это сломает регулярное выражение в простой английский, который действительно помогает.
EDIT
Привет Джейсон С , вы меня поймали, он пропускает эти файлы.
Это исправленное регулярное выражение будет работать для каждого приведенного вами примера:
foo/bar/(?!.*\.jar$).+
Находит:
- Foo / бар / baz.txt
- Foo / бар / Baz
- Foo / бар / баночка
- Foo / бар / baz.jar.txt
- Foo / бар / baz.jar.
- Foo / бар / Baz.
- Foo / бар / baz.txt.
но не находит
Новое объяснение
Это говорит, что ищите файлы в "foo / bar /", затем не сопоставляйте, если есть ноль или более символов, за которыми следует ".jar", а затем больше нет символов ($ означает конец строки), затем, если это не так, сопоставьте любые следующие символы.