Если везде заменить \s* на \s+, что не меняет сути шаблона, результат будет мгновенным, так как квантификатор +? не отступает назад, захват либо есть максимально возможный, либо нет. В то время как *? сначала захватывает все, затем отступает Каждый дополнительный * значительно увеличивает число комбинаций. В твоем случае 16й элемент приводит к экспоненциальному увеличению возможных комбинаций
28 октября 2016 г., 22:30 пользователь Artem Zhuravlev via Moscow-pm < [email protected]> написал: > Тут скорее дело в Захвате и построение обратных ссылок для них, на 16+ > явно замедляется > > > Вот переменная без захватом отработает быстро > my $regexp16 = qr(' > (?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:3\s*?(?:[^a-z]\s*?)+?r) > |(?:2\s*?(?:[^a-z]\s*?)+?r) > '); > > > Так что думаю стоит уменьшить количество захватов. > > Ну или как в книге пишут если можно то > > вместо /a|b/ > > пишите /a/ || /b/ > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > >
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
