BYTE-force columns
Company news, team and friends.

Скорость regexp'ов

BCLTeam рассказывает о скорости работы регулярных выражений. Берут простейший пример - проверить, что строка имеет вид "буква, число, буква, число, буква, число" - и решают его тремя способами. Самый тупой вариант, при котором строчка проверяется полностью вручную, работает в 18 раз быстрее чем вот такой простой regexp: "(^\s*)\w\d\w\d\w\d(\s*$)". Что особенно интересно, если отрезать ведущие и конечные пробелы ручками и проверять выражением " \w\d\w\d\w\d", то получается всего в 10 раз медленнее "рукопашного" способа.


Posted фев 22 2005, 12:20 by Andrew Mayorov
Filed under:

Comments

Михус wrote re: Скорость regexp'ов
on 02-22-2005 16:20
И какая отсюда следует мораль?
XOR wrote re: Скорость regexp'ов
on 02-22-2005 16:33
Думаю, мораль в том, что регэкспы выполняются не волшебным образом за один такт процессора, а как-то существенно более сложным и не всегда оптимальным образом. :) Так что если встает вопрос оптимизации кода, то следует смотреть и на них.
Cepera wrote re: Скорость regexp'ов
on 02-23-2005 11:51
А вопрос оптимизации часто возникает у нас? :-))
XOR wrote re: Скорость regexp'ов
on 02-23-2005 13:57
Тссс! Не говори никому. :)
XOR wrote re: Скорость regexp'ов
on 02-23-2005 15:11
В оригинальном посте появилось много комментариев. В частности, было правильно замечено, что автор забыл скомпилировать регекспы. Со скомпилированным вариантом разница в скорости получается всего в два раза. Так что много не наоптимизируешь.
Gnawer wrote re: Скорость regexp'ов
on 03-02-2005 15:27
регэкспы по определению медленные. Это даже не нуждается в каких-то исследованиях, просто так есть.
Copyright ©2004-2009 BYTE-force
Powered by Community Server (Non-Commercial Edition), by Telligent Systems