2012-10-02 25 views
4

我是新來的正則表達式。最近我提出了一個將通配符模式轉換爲正則表達式的任務。這將用於檢查文件路徑是否與正則表達式匹配。將通配符模式轉換爲正則表達式

例如,如果我的模式是*.jpg;*.png;*.bmp

我能夠劈裂的分號,轉義的字符串,並將.*

String regex = "((?i)" + Regex.Escape(extension).Replace("\\*", ".*") + "$)"; 

進行更換操作逃出*所以我得到的正則表達式將生成的正則表達式對於JPG ((?i).*\.jpg)$) Thien我結合所有我的擴展使用OR運算符。

因此我在這個例子中最終表現將是:

((?i).*\.jpg)$)|((?i).*\.png)$)|((?i).*\.bmp)$) 

我已經測試它和它的工作還沒有我不知道我是否應該添加或刪除任何表情,以涵蓋其他情況下還是有更好的格式化整個事情

的同時也要記住,我可以遇到像*myfile.jpg一個通配符,它​​應該匹配,其名稱與myfile.jpg結尾的所有文件

我可能會遇到類似的模式*myfile.jpg;*.png;*.bmp

+0

您可能也會嘗試codereview.se –

+2

我發現使用http://refiddle.com/對測試正則表達式非常有用。 – jussinen

+0

好吧,我一直在測試我的表達式,但如果您有預感到您錯過了某些東西或過度問題,測試可能會成爲問題 –

回答

8

有很多上有哪些分組去的是不是真的需要...好,除非有什麼東西你都沒有提到這正則表達式將少做同樣的:

/.*\.(jpg|png|bmp)$/i 

這是在正則表達式符號在C#中,這將是:

String regex=new RegEx(@".*\.(jpg|png|bmp)$",RegexOptions.IgnoreCase); 

如果非要在兩者之間編程轉換,你已經開始在正確的軌道上 - 由分號分割,組您的擴展成集(不包括前面的點)。如果您的通配符模式可能更復雜(擴展使用通配符,多通配符開始的比賽),則可能需要更多的工作;)

編輯:(作爲更新)

如果通配符可以比較複雜,那你就快到了。有一個在我上面的代碼中,拉點出(延期)的優化,其在如此放回到你最終用: - 「*」

/.*(myfile\.jpg|\.png|\.bmp)$/i 

基本上「*」>' 「。 - >'\。'(獲得轉義),休息進入設置。基本上它說在myfile.jpg,.png.bmp匹配任何結尾(美元符號錨定到最後)。

+0

文件名如何,例如* myfile.jpg等通配符。假設這樣的模式* myfile.jpg; *。png –

+0

我編輯了這個問題,對不起,我沒有提到最後一個問題。那麼你的表情可以修改成包含這種情況嗎? –

相關問題