正则表达式适用于VB但不适用于C#

时间:2009-05-19 02:15:54

标签: c# .net vb.net regex

我有以下正则表达式来验证文件名:

^(([a-zA-Z]:| \)\)?(((。)|(..)|([^ \ /:* \?“\ |<&gt ;.]( ([^ \ /:* \?“\ |<>。])|([^ \ /:* \?”\ |<>] [^ \ /:* \?“\ |<&gt ;.]))?))\) [^ \ /:* \?“\ |<&gt ;.](([^ \ /:* \?”\ |< >。])|([^ \ /:* \?“\ |<>] * [^ \ /:* \?”\ |<>。]))?$

我可以在VB.NET中使用它而不是C#。我无法弄清楚为什么它在一个而不是另一个中起作用。

VB代码:

Regex.Matches("c:\temp\abc.exe", "^(([a-zA-Z]:|\\)\\)?(((\.)|(\.\.)|([^\\/:\*\?""\|<>\. ](([^\\/:\*\?""\|<>\. ])|([^\\/:\*\?""\|<>]*[^\\/:\*\?""\|<>\. ]))?))\\)*[^\\/:\*\?""\|<>\. ](([^\\/:\*\?""\|<>\. ])|([^\\/:\*\?""\|<>]*[^\\/:\*\?""\|<>\. ]))?$")

C#代码:

Regex.Matches("c:\temp\abc.exe", @"^(([a-zA-Z]:|\\)\\)?(((\.)|(\.\.)|([^\\/:\*\?""\|<>\. ](([^\\/:\*\?""\|<>\. ])|([^\\/:\*\?""\|<>]*[^\\/:\*\?""\|<>\. ]))?))\\)*[^\\/:\*\?""\|<>\. ](([^\\/:\*\?""\|<>\. ])|([^\\/:\*\?""\|<>]*[^\\/:\*\?""\|<>\. ]))?$");

据我所知,两种语言中的模式都是相同的。当我运行VB代码时,我得到一个匹配。当我运行C#代码时,我什么都没得到。

有人能看到我错过的东西吗?

1 个答案:

答案 0 :(得分:17)

您是否还需要在C#中转义文件名? E.g:

@"c:\temp\abc.exe"