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