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