Производительность и практика ленивого регулярного выражения?
Я читаю в Интернете, я должен избегать ленивого регулярного выражения из-за "худшей" производительности и "плохой" практики. Я никогда не видел примера. Я не слышал о приложении, которое связано с его регулярным выражением. Другие говорят, что они "научились" избегать этого, но никогда не упоминают, почему, хотя один намекнул, что это связано с тем, что обычная сторона влияет на включение или выключение флагов в старых программах.
Есть ли причины, чтобы избежать ленивого регулярного выражения? Если да, то каковы они?
Ответы
Ответ 1
Одна вещь, которую вы должны попытаться обеспечить с помощью любого регулярного выражения, состоит в том, что существует только один способ для этого соответствия данному совпадению. Это звучит странно, но есть отличная статья, которая демонстрирует здесь пункт... http://www.regular-expressions.info/catastrophic.html
Редко, что вы столкнетесь с этой степенью катастрофического отступления, как показано в этой статье. Но на всякий случай, неплохо запустить простой тест при написании регулярного выражения, которое будет широко использоваться.
Ответ 2
Это зависит от вашей целевой аудитории.
Если вы не заботитесь об оптимизации, не имеете большого трафика и т.д., это, вероятно, не изменит ситуацию, и многие другие методы оптимизации, которые помогут вам получить дополнительную 1/4 секунды, выиграли 't тоже.
Lazy regex может занять гораздо больше времени, но вы можете не заметить повышение производительности, если не имеете дело с тысячами строк, которые его просматривают или повторяются на странице.
Ответ 3
Ваше регулярное выражение должно соответствовать вашей проблеме. Я видел случаи, когда ленивое регулярное выражение выполнялось значительно хуже, чем жадное регулярное выражение, а также наоборот. Нет универсального "лучшего" способа сделать это. Самое главное, что регулярное выражение возвращает ожидаемые результаты. После того, как вы получите это, вы можете настроить его для скорости и профилировать разные версии, чтобы получить точное сравнение скорости.