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

Динар Жамалиев zhdinar на gmail.com
Сб Окт 29 01:13:43 PDT 2016


Ясно изъясняться не моя фишка. Под сутью я имел другое. Для примера в
контексте строки вида
 "bla bla bla"
шаблоны вида
 /bla\s*?/ и
 /bla\s+?/ и
идентичны в том смысле, что подстрока "bla " все равно будет найдена, не
так ли?

29 октября 2016 г., 2:41 пользователь Loginoff Nick via Moscow-pm <
moscow-pm на pm.org> написал:

> \s* != \s+ - так что это очень сильно меняет суть шаблона. В данном
> контексте пробела может и не быть... Так что это не решает проблему
>
> 28.10.2016, 21:44, "Динар Жамалиев via Moscow-pm" <moscow-pm на pm.org>:
>
> Если везде заменить \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
>
>
> ,--
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
>
> --
> С Уважением, Login|off Nick или STork.
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20161029/1e071b54/attachment.html>


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