Я написал регулярное выражение, которое анализирует путь к файлу в разные группы (DRIVE, DIR, FILE, EXTENSION).Повторное совпадение занимает очень много времени.
^((?<DRIVE>[a-zA-Z]):\\)*((?<DIR>[a-zA-Z0-9_]+(([a-zA-Z0-9_\s_\-\.]*[a-zA-Z0-9_]+)|([a-zA-Z0-9_]+)))\\)*(?<FILE>([a-zA-Z0-9_]+(([a-zA-Z0-9_\s_\-\.]*[a-zA-Z0-9_]+)|([a-zA-Z0-9_]+))\.(?<EXTENSION>[a-zA-Z0-9]{1,6})$))
Я сделал тест на C#. Когда путь, который я хочу проверить, правильный. Результат очень быстрый, и это то, чего я хотел ожидать.
string path = @"C:\Documents and Settings\jhr\My Documents\Visual Studio 2010\Projects\FileEncryptor\Dds.FileEncryptor\Dds.FileEncryptor.csproj";
=> OK
Но когда я пытаюсь проверить с пути, я знаю, что не будет соответствовать, как это:
string path = @"C:\Documents and Settings\jhr\My Documents\Visual Studio 2010\Projects\FileEncryptor\Dds.FileEncryptor\Dds.FileEncryptor?!??????";
=> BUG
Тест замораживается, когда я называю эту часть кода
Match match = s_fileRegex.Match(path);
Когда я просматриваю свой Process Explorer, я вижу, что процесс QTAgent32.exe висит на 100% моего процессора. Что это значит ?
Вы считали [синтаксический анализ пути] (http://stackoverflow.com/questions/3386258/parsing-a-given-path-in-c) перед проверкой? – kennytm
Почему вы не используете полезные методы в классе Path? Нет необходимости использовать регулярное выражение для извлечения этой информации. – Jens
RegEx - это неправильный способ пойти сюда. Я все еще хотел бы знать, почему этот RegEx убивает regexr.com:> – atamanroman