У меня есть следующее регулярное выражение для проверки имени файла:
^ (([a-zA-Z]: | \) \)? (((.) | (..) | ([^ \ /: * \? "\ | <>.] (([ ^ \ /: * \? "\ | <>.]) | ([^ \ /: * \?" \ | <>] [^ \ /: * \? "\ | <>.]) )?)) \) [^ \ /: * \? "\ | <>.] (([^ \ /: * \?" \ | <>.]) | ([^ \ /: * \? "\ | <>] * [^ \ /: * \?" \ | <>.]))? $
Я могу заставить его работать в 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 #, я ничего не получаю.
Кто-нибудь может увидеть, что мне не хватает?