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