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

Gid*_*sey 0 .net c# regex vb.net

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

^(([a-zA-Z]:| \)\)?(((.)|(..)|([^\/:*\?"\ | <>.](([^// :*\?"\ | <>.])|([^\/:*\?"\ | <>] [^\/:*\?"\ | <>.]))?))\) [^\/:*\?"\ | <>.](([^\/:*\?"\ | <>.])|([^\/:*\?"\ | <>]*[^\/:*\?"\ | <>.]))?$

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

VB代码:

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

C#代码:

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

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

任何人都能看到我错过的东西吗?

Mat*_*hen 17

你不需要在C#中转义文件名吗?例如:

@"c:\temp\abc.exe"
Run Code Online (Sandbox Code Playgroud)