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

Динар Жамалиев zhdinar на gmail.com
Сб Окт 29 04:09:06 PDT 2016


верно, вот что значит давно не пользвался регулярками

29 октября 2016 г., 16:03 пользователь Nikolay Mishin via Moscow-pm <
moscow-pm на pm.org> написал:

> Существуют следующие стандартные повторители: (https://metacpan.org/pod/
> distribution/POD2-RU/lib/POD2/RU/perlre.pod)
> *           Найдет 0 или больше раз
> +           Найдет 1 или больше раз
> ?           Найдет 1 или 0 раз
> {n}         Найдет точно n раз
> {n,}        Найдет по крайней мере n раз
> {n,m}       Найдет по крайней мере n раз, но не более m раз
>
> так что
>
>  /bla\s*?bla/ совпадет и с [blabla] и [bla bla]
>
> а
>
>  /bla\s+?bla/ только с [bla bla]
> 29.10.2016, 11:28, "Динар Жамалиев via Moscow-pm" <moscow-pm на pm.org>:
>
> вернее такие шаблоны выдают идентичный результат
>  /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
>
>
> ,--
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
>
> --
> С уважением
> Николай Мишин
>
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20161029/cd658fec/attachment-0001.html>


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