2010-07-18 120 views
2

我一直在瞎搞試圖算出這個自己,但其採取了一會兒..正則表達式,以確定是否一個文件是一個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」) – 2010-07-18 01:12:19

回答

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

我想。

編輯:感謝彼得另一次更正。

+0

爲什麼你需要捕獲?使用(?:...) – Anders 2010-07-18 00:09:45

+0

由於你現在編輯它似乎工作 完美,基本上我只想知道目錄中的哪些文件是rar文件。看起來很簡單,現在我看它:) – BenW 2010-07-18 00:12:08

+0

在C#的正則表達式引擎中,點*不是*元字符嗎? – quantumSoup 2010-07-18 00:12:15

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

+1我喜歡這個,但是我覺得在Reinderiens的回答中可讀性更好,至少對於不熟悉正則表達式的人來說。 – Anders 2010-07-18 00:22:16

+0

第一部分不正確 - 兩者都是因爲'.'不需要在char類中轉義,而且文件名中可以​​有多個'.'字符。 (可能不明智的是有一個名爲'..... rar'的文件,但它仍然有效。) – 2010-07-18 01:04:22

相關問題