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

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


вернее такие шаблоны выдают идентичный результат
 /bla\s*?bla/ и
 /bla\s+?bla/

29 октября 2016 г., 13:13 пользователь Динар Жамалиев <zhdinar на gmail.com>
написал:

> Ясно изъясняться не моя фишка. Под сутью я имел другое. Для примера в
> контексте строки вида
>  "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/8ad98de4/attachment-0001.html>


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