2010-10-31 6 views
0

Supposons que nous avons la prochaine structure de répertoire:Comment créer une expression rationnelle qui correspond à tous les fichiers du répertoire, à l'exception des fichiers avec l'extension .jar?

/parentdir/ 
    /childdir/ 
     child_file1.txt 
     child_file2.jar 
    file1.txt 
    file2.txt 

donc, nous obtenons ici les noms de fichier complet:

/parentdir/file1.txt 
/parentdir/file2.txt 
/parentdir/childdir/child_file1.txt 
/parentdir/childdir/child_file2.jar 

Quelle expression régulière correspond à tous ces fichiers, sauf pour la dernière avec. extension de pot?

Petite précision: l'expression peut contenir la chaîne 'parentdir' et la chaîne '.jar', tous les autres fichiers et répertoires peuvent avoir des noms et des extensions.

Répondre

3

Vous pouvez utiliser les assertions négatives: /(?<!\.jar)$/

Cela correspondrait à quelque chose qui ne se termine pas dans .jar

+0

Malheureusement, cela ne fonctionne pas. Je l'utilise dans le fichier mercurials .hgignore. Peut-être, mercurial ne supporte pas ce type de regex. – Roman

+0

C'est tout à fait possible, c'est une expression régulière compatible avec Perl. Je ne sais pas mercurial ou hgignore, donc je ne peux pas aider plus, désolé! –

+3

Cela fonctionne, il suffit de supprimer les barres obliques d'ouverture et de fermeture, par ex. "(?

1

La regex affirmation négative est une façon d'aller, mais la solution la plus courante pour ce dans Mercurial land est à ignorer largement (par exemple, ignorez simplement parentdir/) puis hg add les quelques fichiers d'exception que vous ne voulez pas ignorer. Dans svn et cvs vous ne pouvez pas ajouter un fichier qui est dans votre liste d'ignorés et si vous faites les changements futurs ne sont pas suivis, mais dans mercurial hg add ignore complètement ignorer, donc à moins que vous ayez beaucoup de nouveaux pots apparaissant à l'avenir, ignorez simplement largement et ajoutez le .jar.

+0

merci, ne connaissait pas cette fonctionnalité hg. – Roman

Questions connexes