Взрывная ловушка квантификатора
Я использую следующее регулярное выражение для проверки правильности пути к файлу:
^(?:[a-zA-Z]\:\\|\\\\)([^\\\/\:\*\?\<\>\"\|]+(\\){0,1})+$
Использование тестовой строкиV:\Sample Names\Libraries\DeveloperLib\DeveloperComDlgs\res
признается действительным Я даже могу добавить недопустимые символы в начало строки без проблем. Однако, когда я добавляю недопустимый символ в конец строки, веб-страница зависает от катастрофического возврата.
Что вызывает это в этой строке регулярного выражения?
Разрушая регулярное выражениеПолная строка: ^(?:[a-zA-Z]\:\\|\\\\)([^\\\/\:\*\?\<\>\"\|]+(\\){0,1})+$
Первая группа: (?:[a-zA-Z]\:\\|\\\\)
Вторая группа: ([^\\\/\:\*\?\<\>\"\|]+(\\){0,1})
[^\\\/\:\*\?\<\>\"\|]+
Проверяет, что нет недопустимых символов (\ /: *? <> "|)Вторая часть: (\\){0,1}
Проверяет обратную косую черту между разделами столько раз, сколько необходимоЯ думаю, что это может быть{0, 1}
вызывая проблему, так как это позволяет вернуться назад, но я не уверен. есть идеи?