2010-07-18 7 views
2

j'ai été déconner essayer ce chiffre moi-même, mais sa prise un certain temps ..Regex pour déterminer si un fichier est un fichier rar

Fondamentalement, après une regex pour passer les tests suivants:

IsARarFile("test.rar"); // true 
IsARarFile("test.r00"); // true 
IsARarFile("test.txt"); // false 
IsARarFile("test.avi"); // false 
IsARarFile("test.mp4"); // false 
IsARarFile("test.001"); // true 
IsARarFile("test.ba00"); // false 

Merci pour toute aide

+2

Pour quoi faites-vous cela? Selon le cas d'utilisation, il peut être préférable de vérifier que les quatre premiers octets des données du fichier sont "Rar!" au lieu de supposer basé sur l'extension de fichier. (D'autant plus que d'autres choses pourraient utiliser "test.001") –

Répondre

6
\.(?:rar|r\d\d|\d\d\d)$ 

je pense.

Éditer: Crédit à Peter pour une autre correction.

+0

Pourquoi avez-vous besoin de capturer? utilisez (?: ...) – Anders

+0

Depuis votre modification, il semble maintenant fonctionner Parfait, fondamentalement je veux juste savoir quels fichiers dans un répertoire sont des fichiers rar. Semble assez simple maintenant que je le regarde :) – BenW

+0

Est-ce que le point * n'est pas * un métacaractère dans le moteur de regex de C#? – quantumSoup

5
([^\.]+)\.(r(ar|\d\d)|\d{3})$ 
+0

+1 J'aime celui-ci, mais je pense que la lisibilité est meilleure dans la réponse de Reinderiens, au moins pour les personnes qui ne connaissent pas les expressions régulières. – Anders

+0

La première partie est incorrecte - à la fois parce que le '.' n'a pas besoin d'échapper dans une classe char, et parce que les noms de fichiers peuvent avoir plusieurs caractères' .' (Il peut ne pas être judicieux d'avoir un fichier appelé par exemple '..... rar', mais il est toujours valide.) –

Questions connexes