Существуют следующие стандартные повторители: (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" <[email protected]>:
вернее такие шаблоны выдают идентичный результат
 /bla\s*?bla/ и
 /bla\s+?bla/
 
29 октября 2016 г., 13:13 пользователь Динар Жамалиев <[email protected]> написал:
Ясно изъясняться не моя фишка. Под сутью я имел другое. Для примера в контексте строки вида 
 "bla bla bla"  
шаблоны вида 
 /bla\s*?/ и
 /bla\s+?/ и
идентичны в том смысле, что подстрока "bla " все равно будет найдена, не так ли?
 
29 октября 2016 г., 2:41 пользователь Loginoff Nick via Moscow-pm <[email protected]> написал:
 
\s* != \s+ - так что это очень сильно меняет суть шаблона. В данном контексте пробела может и не быть... Так что это не решает проблему
 
28.10.2016, 21:44, "Динар Жамалиев via Moscow-pm" <[email protected]>:
Если везде заменить \s* на \s+, что не меняет сути шаблона, результат будет мгновенным, так как квантификатор +? не отступает назад, захват либо есть максимально возможный, либо нет. В то время как *? сначала захватывает все, затем отступает Каждый дополнительный * значительно увеличивает число комбинаций. В твоем случае 16й элемент приводит к экспоненциальному увеличению возможных комбинаций
 
28 октября 2016 г., 22:30 пользователь Artem Zhuravlev via Moscow-pm <[email protected]> написал:
Тут скорее дело в Захвате и построение обратных ссылок для них, на 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
[email protected] | http://moscow.pm.org
 
,--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
 
 
-- 
С Уважением, Login|off Nick или STork.
 

--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
 
,--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
 
 
-- 
С уважением
Николай Мишин
 
 
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить