Pour ce faire, vous devez utiliser cette expression régulière :
foo/bar/.+?\.(?!jar).+
Explication
Tu lui dis ce qu'il faut ignorer, donc cette expression cherche des choses que tu Ne le fais pas. veulent.
- Vous recherchez tout fichier dont le nom (y compris le répertoire relatif) comprend (foo/bar/)
- Vous recherchez ensuite tous les caractères qui précèdent un point ( .+ ? \. == correspond à un ou plusieurs caractères de n'importe quel temps jusqu'à ce que vous atteigniez le caractère point)
- Vous vérifiez ensuite qu'il n'a pas la terminaison "jar" (?!jar) (C'est ce que l'on appelle un regard négatif en avant.
- Enfin, vous saisissez la fin qu'il a (.+)
Les expressions régulières sont faciles à gâcher, c'est pourquoi je vous conseille vivement de vous procurer un outil tel que Regex Buddy pour vous aider à les construire. Il décompose une regex en anglais simple, ce qui est très utile.
EDIT
Hey Jason S tu m'as eu, il manque ces fichiers.
Cette regex corrigée fonctionnera pour tous les exemples que vous avez cités :
foo/bar/(?!.*\.jar$).+
Il constate :
- foo/bar/baz.txt
- foo/bar/baz
- foo/bar/jar
- foo/bar/baz.jar.txt
- foo/bar/baz.jar.
- foo/bar/baz.
- foo/bar/baz.txt.
Mais ne trouve pas
Nouvelle explication
Cela signifie qu'il faut chercher les fichiers dans "foo/bar/", puis ne pas chercher s'il y a zéro ou plus de caractères suivis de ".jar" et ensuite plus de caractères ($ signifie fin de ligne), puis, si ce n'est pas le cas, chercher tous les caractères suivants.