2012-10-02 122 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

我编辑了这个问题,对不起,我没有提到最后一个问题。那么你的表情可以修改成包含这种情况吗? –

相关问题