Регулярное выражение работает в VB, но не в C # - PullRequest
0 голосов
/ 19 мая 2009

У меня есть следующее регулярное выражение для проверки имени файла:

^ (([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 #, я ничего не получаю.

Кто-нибудь может увидеть, что мне не хватает?

1 Ответ

17 голосов
/ 19 мая 2009

Вам не нужно также экранировать имя файла в C #? Например:

@"c:\temp\abc.exe"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...