![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Имеется текстовый файл 150 Мб
два регулярных выражения: 1) if (/d\s+-\d|\d-\s+\d/){print OUT} 2) if(/\d\s+-\d/ || /\d-\s+\d/){print OUT} первое обрабатывает весь файл за 37, 67 секунды второе выражение обрабатывает за 3,42 секунды (в 10 раз быстрее!) У меня уже голова кипит, не пойму в чем дело. Два других выражения: /(?:тыс|млн|млрд)\.р/ /тыс\.р/ || /млн\.р/ || /млрд\.р/ работают с аналогичной скоростью (2,4 сек) Просто мистика какая-то. Добавлено @ 19:55 Ааа, кажется, я понял. Все дело в том, что конструкция /d\s+-\d|\d-\s+\d/ вызывает большое количество возратов. Необходимо оптимизировать это выражение до /\d(?:\s+-|-\s+)\d/. Теперь скорость обработки 5,99 сек. Но это все равно гораздо медленней, чем два выражения /\d\s+-\d/ || /\d-\s+\d/) Это сообщение отредактировал(а) Suppir - 30.8.2009, 19:56 |
|||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Еще прикол:
/\d{4}г|N\d|\d"\d/ - 56,27 сек /N\d|\d(?:\d{3}г|"\d)/ - 44,36 сек /\d{4}г/ || /N\d/ || /\d"\d/ - 3,88 сек результат полностью аналогичный. Оптимизация в 15 раз! ActivePerl 5.10, Windows XP, SP 3 |
|||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
1
Это сообщение отредактировал(а) Suppir - 31.8.2009, 10:43 |
|||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Есть какие-нибудь предположения?
![]() |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
||||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Спасибо, arto. Книжка, можно сказать, у меня настольная
![]() Собственно, благодаря ей и знаю, как оптимизировать /d\s+-\d|\d-\s+\d/ - 37, 67 сек. до /\d(?:\s+-|-\s+)\d/ - 5,99 сек. . Но в это книжке ничего про пакеты (if /.../ && /.../ && !/.../) регулярных выражений не написано. Это сообщение отредактировал(а) Suppir - 1.9.2009, 07:22 |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perldoc re на предмет debug, и посмотреть разницу между выражениями.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |