В последнее время я использую много регулярных выражений в java/ groovy. Для тестирования я обычно использую regex101.com. Очевидно, я тоже смотрю на производительность регулярных выражений.
Одна вещь, я заметил, что использование .*
правильно может значительно улучшить общую производительность. Прежде всего, используя .*
между ними или, лучше сказать, не в конце регулярного выражения, это производительность.
Например, в это регулярное выражение требуется необходимое количество шагов: 27:
Если я изменил первый .*
на \s*
, он значительно уменьшит необходимые шаги до 16:
Однако если я меняю второй .*
на \s*
, он не уменьшает дальнейшие шаги:
У меня есть несколько вопросов:
- Почему выше? Я не хочу сравнивать
\s
и.*
. Я знаю разницу. Я хочу знать, почему затраты\s
и.*
различаются в зависимости от их положения в полном регулярном выражении. А затем характеристики регулярного выражения, которые могут стоить по-разному в зависимости от их положения в общем регулярном выражении (или на основе любого другого аспекта, кроме положения, если таковой имеется). - Дает ли счетчик шагов, данный на этом сайте, какие-либо указания о производительности регулярных выражений?
- какие другие простые или похожие (связанные с положением) наблюдения за регулярными выражениями у вас есть?