[Moscow.pm] Регулярные выражения. Помогите понять, почему так.

Динар Жамалиев zhdinar на gmail.com
Пт Окт 28 11:44:24 PDT 2016


Если везде заменить \s* на \s+, что не меняет сути шаблона, результат будет
мгновенным, так как квантификатор +? не отступает назад, захват либо есть
максимально возможный, либо нет. В то время как *? сначала захватывает все,
затем отступает Каждый дополнительный * значительно увеличивает число
комбинаций. В твоем случае 16й элемент приводит к экспоненциальному
увеличению возможных комбинаций

28 октября 2016 г., 22:30 пользователь Artem Zhuravlev via Moscow-pm <
moscow-pm на pm.org> написал:

> Тут скорее дело в Захвате и построение обратных ссылок для них, на 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
> moscow-pm на pm.org | http://moscow.pm.org
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20161028/e513617f/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm