Мне нужно создать синтаксис Regex (.NET), чтобы определить, заканчивается ли строка с определенным значением. В частности, мне нужно проверить, имеет ли файл определенное расширение (или набор расширений).
Код, который я пытаюсь исправить, использовал:
.*\.(png|jpg|gif)$
который ужасно медленный для неудачных совпадений в моем сценарии (предположительно из-за обратного отслеживания.
Простое удаление .*
(это хорошо, поскольку API проверяет только совпадения и ничего не извлекает) в начале делает регулярное выражение намного более эффективным.
По-прежнему кажется, что он довольно неэффективен. Я пропустил что-то очевидное здесь?
К сожалению, я не управляю рассматриваемым API, поэтому мне нужно регулярное выражение, чтобы сделать это, хотя я обычно не рассматривал регулярное выражение как правильный инструмент для задания.
Я также провел несколько тестов с помощью RegexOptions.RightToLeft
и обнаружил, что я могу выжать немного больше производительности из своего тестового примера с помощью ^.*\.(png|jpg|gif)$
, но я не могу найти способ указать параметр RightToLeft
в пределах строка самого регулярного выражения, поэтому я не думаю, что могу ее использовать.