Java Regex pour rechercher un fichier particulier

Dans l’un de mes cas de test, je souhaite copier un fichier JAR particulier d’un composant d’un emplacement à un autre. Par exemple, lorsque le répertoire cible contient uniquement les fichiers JAR suivants

org.test.custom.search-4.2.2-SNAPSHOT-.jar
org.test.custom.search-4.2.2- tests -SNAPSHOT.jar

Je veux copier le org.test.custom.search-4.2.2-SNAPSHOT-.jar. Où version de ce pot peut être changé à tout moment. Je peux donc utiliser l’expression régulière à cette fin, comme mentionné ici [1]. Mais je veux savoir comment omettre l’autre jar dans regex. c’est-à-dire vouloir omettre le fichier jar qui a la chaîne ” tests ” dans son nom.

1. Regex pour les fichiers dans un répertoire

Vous pouvez utiliser indexOf au lieu de regex pour vérifier si le nom du fichier contenant le mot “tests” ressemble à ceci:

 if(fileName.indexOf("tests") >= 0) { // do what you want } 

Mise à jour: indexOf() sera beaucoup plus rapide qu’une regex , et est probablement aussi plus facile à comprendre.

La solution basée sur les regex serait:

 if (fileName.matches(".*tests.*")) { //do something } else { //do something else } 

Correspond au SNAPSHOT exactement avec n’importe quel numéro de version, en ignorant tous les autres (y compris les tests-SNAPSHOT):

 org\.test\.custom\.search-\d+\.\d+\.\d+-SNAPSHOT-\.jar 

Une expression rationnelle correspondant au pot principal mais pas au pot de test pourrait être:

 \w+-[\d.]+-(?!tests-).*\.jar 

Il a un correcteur négatif pour la chaîne “tests-“. Notez que vous devrez échapper aux barres obliques inverses lorsque vous mettez cette expression rationnelle dans une chaîne.