У меня есть несколько регулярных выражений в Perl-скрипте, которые являются правильными, но медленными. Я рассматриваю возможность повышения производительности, добавляя дополнительные + операторы (т. Е. * + Вместо * и ++ вместо +), чтобы отключить обратную трассировку. Я попытался заменить все их, и регулярные выражения перестали работать ... так много для простого решения. Как узнать, где я могу добавить их, где он не сломает регулярное выражение?улучшение производительности регулярного выражения в Perl, добавив +
ответ
Если регулярные выражения перестали работать, вы либо Арен» t с использованием версии perl, которая их поддерживает, или вам действительно нужно отступить в этих случаях.
Определите разделы регулярного выражения, которые никогда не нуждаются в обратном отслеживании (то есть, если их просят согласовать, начиная с заданной точки, никогда не будет больше одной длины, которую вы, возможно, захотите, чтобы они соответствовали) и окружить их с (?> )
. Это имеет тот же эффект, что и ++/* +, и поддерживается даже до 5.10.
Обратите внимание, что ограничение обратного отслеживания часто не является «оптимизацией», поскольку оно изменяет то, что будет и не будет соответствовать. Идея заключается в том, что вы используете ее для лучшего описания того, что вы на самом деле хотите согласовать. Заимствуя из статьи, связанной с ответом OP, что-то вроде ^(.*?,){11}P
(двенадцатое разделенное запятыми поле начинается с P) не просто неэффективно, оно неверно, так как обратное слежение приведет к тому, что он будет фактически соответствовать даже тогда, когда только поле после двенадцатого начинается с P. Исправив его до ^(?>.*?,){11}P
, вы ограничиваете его фактическим соответствием правильному числу ведущих полей. (В этом тривиальном случае ^([^,]*,){11}P
также выполняет эту работу, но если вы добавите поддержку скрытых или котируемых запятых в поля с чередованием, становится проще выбрать (?>
.)
Хммм ... один раз я отвечал на вопрос, глядя на «Связанный колонке» привел меня к этому, который имеет некоторые довольно хорошие идеи .... http://www.regular-expressions.info/catastrophic.html
- 1. Улучшение производительности регулярного выражения
- 2. Улучшение производительности регулярного выражения в большой строке
- 3. Улучшение производительности регулярного выражения соответствия синтаксису
- 4. Улучшение пользовательского регулярного выражения
- 5. Улучшение регулярного выражения
- 6. Улучшение опережения регулярного выражения
- 7. Улучшение производительности регулярного выражения для личных IP-адресов в PosgreSQL
- 8. Регулярного выражения в Perl
- 9. Улучшение моих навыков регулярного выражения
- 10. Разбор регулярного выражения perl
- 11. Perl понимание регулярного выражения?
- 12. Perl регулярного выражения проблема
- 13. Perl Экземпляр регулярного выражения
- 14. Perl шаблон регулярного выражения
- 15. Замена регулярного выражения Perl
- 16. Регулярного выражения группировки в Perl
- 17. Декодирование регулярного выражения в Perl
- 18. интерпретация регулярного выражения в perl
- 19. Задача регулярного выражения в Perl
- 20. Показатели производительности регулярного выражения Java?
- 21. Улучшение производительности последнего совпадения в Perl Regex
- 22. Улучшение регулярного выражения для проверки суммы платежа
- 23. Ошибка логики регулярного выражения Perl
- 24. Python версия регулярного выражения Perl
- 25. Значение бит регулярного выражения perl?
- 26. Perl условное вытягивание регулярного выражения
- 27. перевести рубин регулярного выражения для PHP/Perl регулярного выражения
- 28. Улучшение производительности кода Python
- 29. Perl: Есть ли ограничение строки/регулярного выражения?
- 30. Улучшение производительности
Можете ли вы опубликовать некоторые из требуемых регулярных выражений? Оптимизация на примере может помочь вам лучше понять, в каких случаях следует использовать определенные оптимизации. – strager