Я пишу (в С#) простой парсер для обработки языка сценариев, который очень похож на классический C.
В одном файле script у меня есть регулярное выражение, которое я использую, чтобы распознавать /* блокировать комментарии */, вступает в какой-то бесконечный цикл, принимая на себя 100% -ый процессор в течение многих лет.
Я использую Regex:
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
Любые предложения о том, почему это может быть заблокировано?
В качестве альтернативы, какое другое Regex я мог бы использовать вместо этого?
Дополнительная информация:
- Работа в С# 3.0 с таргетингом на .NET 3.5;
- Я использую метод Regex.Match(string, int) для начала сопоставления по определенному индексу строки;
- Я оставил программу более часа, но совпадение не завершено;
- Параметры, переданные конструктору Regex,
RegexOptions.Multiline
иRegexOptions.IgnorePatternWhitespace
; - Регулярное выражение работает правильно для 452 моих 453 тестовых файлов.