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

Андрей Асякин asan999 на gmail.com
Пт Окт 28 11:53:11 PDT 2016


+?, *? работают одинаково, ? отключает жадность (отступать назад им 
бессмысленно), а вот  ++, *+ - да, не откатываются назад при неудаче.

On 10/28/2016 09:44 PM, Динар Жамалиев via Moscow-pm wrote:
> Если везде заменить \s* на \s+, что не меняет сути шаблона, результат 
> будет мгновенным, так как квантификатор +? не отступает назад, захват 
> либо есть максимально возможный, либо нет. В то время как *? сначала 
> захватывает все, затем отступает Каждый дополнительный * значительно 
> увеличивает число комбинаций. В твоем случае 16й элемент приводит к 
> экспоненциальному увеличению возможных комбинаций
>
> 28 октября 2016 г., 22:30 пользователь Artem Zhuravlev via Moscow-pm 
> <moscow-pm на pm.org <mailto: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 <mailto:moscow-pm на pm.org> | http://moscow.pm.org
>
>
>
>

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20161028/c58c3aa7/attachment.html>


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