Проблема с моим регулярным выражением? - PullRequest
3 голосов
/ 18 марта 2010

Я пытаюсь определить количество совпадений в относительном пути для ссылок на каталоги ("..\"). Итак, у меня есть следующий шаблон: «(\.\.\\)», который работает, как и ожидалось, для пути «..\..\a\b», где он даст мне 2 успешные группы («..\»), но когда я попробую путь »..\a\b "он также вернет 2, когда должен вернуться 1. Я пробовал это в инструменте reg ex, таком как Expresso, и он, кажется, работает там, но не в .net, есть идеи?

Ответы [ 4 ]

1 голос
/ 18 марта 2010

Попробуйте вместо этого:

(\.\.\\)

Точки (.) соответствуют любому символу, а не буквальному значению. Чтобы соответствовать буквальному значению, вы должны избегать их с обратной косой чертой.

0 голосов
/ 18 марта 2010

Вы избежали обратной косой черты, чтобы избежать точек в вашем регулярном выражении? То есть "\\.\\.\\\\" или @"\.\.\\"?

Вы всегда можете не использовать Regex для этой задачи и использовать

Int32 count = url.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries)
                 .Where(s => s == "..")
                 .Count();

вместо этого. =)

0 голосов
/ 18 марта 2010

Поскольку Expresso работает на .net, ваше утверждение «Я пробовал это в инструментах reg ex, таких как Expresso, и похоже, что оно работает там, но не в .net», похоже, не имеет большого смысла.
Это говорит о том, что проблема заключается не в регулярном выражении, а в том, как вы его используете.
Внимательно посмотрите на метод Regex, который вы используете для сбора результатов, и как вы обрабатываете эти результаты, возможно, именно в этом и заключается проблема.

Надеюсь, это поможет!

0 голосов
/ 18 марта 2010

Я получаю правильный ответ, попробуйте следующее:

Console.WriteLine(Regex.Matches(@"..\..\a\b", @"(\.\.\\)").Count); //2
Console.WriteLine(Regex.Matches(@"..\a\b", @"(\.\.\\)").Count); //1

Вы экранировали или использовали буквальные строки для \ в .NET?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...