2010-07-18 2 views
2

я уже Мессинг вокруг, пытаясь понять это на себя, но его занять некоторое время ..Regex, чтобы определить, если файл является RAR файл

В основном после того, как регулярное выражение, чтобы пройти следующие испытания:

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 

Спасибо за любую помощь

+2

Для чего вы это делаете? В зависимости от варианта использования может быть лучше проверить, что первые четыре байта данных файла «Rar!» вместо предположения на основе расширения файла. (Тем более, что другие вещи могут использовать «test.001») –

ответ

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

я думаю.

Редактировать: Кредит Питеру для другой коррекции.

+0

Зачем вам нужно снимать? use (?: ...) – Anders

+0

Поскольку ваше редактирование теперь работает Идеально, в основном я просто хочу знать, какие файлы в каталоге являются rar-файлами. Кажется довольно простым сейчас, когда я смотрю на него :) – BenW

+0

Является ли точка * не * метасимволом в регулярном выражении C#? – quantumSoup

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

+1 Мне нравится этот, однако я чувствую, что читаемость лучше в ответе Райндиненса, по крайней мере, для людей, не знакомых с регулярными выражениями. – Anders

+0

Первая часть неверна - как потому, что '.' не требует экранирования внутри класса char, а потому, что имена файлов могут содержать несколько символов'. '. (Возможно, нет смысла иметь файл, называемый «..... rar», но он по-прежнему действителен.) –

Смежные вопросы