<div>\s* != \s+ - так что это очень сильно меняет суть шаблона. В данном контексте пробела может и не быть... Так что это не решает проблему</div><div> </div><div>28.10.2016, 21:44, "Динар Жамалиев via Moscow-pm" <moscow-pm@pm.org>:</div><blockquote type="cite"><div>Если везде заменить \s* на \s+, что не меняет сути шаблона, результат будет мгновенным, так как квантификатор +? не отступает назад, захват либо есть максимально возможный, либо нет. В то время как *? сначала захватывает все, затем отступает Каждый дополнительный * значительно увеличивает число комбинаций. В твоем случае 16й элемент приводит к экспоненциальному увеличению возможных комбинаций</div><div> <div>28 октября 2016 г., 22:30 пользователь Artem Zhuravlev via Moscow-pm <span><<a target="_blank" href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a>></span> написал:<blockquote style="margin:0 0 0 0.8ex;border-left:1px #ccc solid;padding-left:1ex;"><div>Тут скорее дело в Захвате и построение обратных ссылок для них, на 16+ явно замедляется <br /><br /><br />Вот переменная без захватом отработает быстро<div style="font-size:12.8px;">my $regexp16 = qr('</div><div style="font-size:12.8px;">(?:3\s*?(?:[^a-z]\s*?)+?r)</div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">3\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">|(<span style="font-size:12.8px;">?:</span><span style="font-size:12.8px;">2\s*?(?:[^a-z]\s*?)+?r)</span></div><div style="font-size:12.8px;">');<br /><br /><br />Так что думаю стоит уменьшить количество захватов.<br /><br />Ну или как в книге пишут если можно то <br /><br />вместо /a|b/ <br /><br />пишите /a/ || /b/</div><div> </div></div><br />--<br />Moscow.pm mailing list<br /><a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a target="_blank" href="http://moscow.pm.org/">http://moscow.pm.org</a><br /> </blockquote></div></div>,<span>--<br />Moscow.pm mailing list<br /><a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/">http://moscow.pm.org</a></span></blockquote><div> </div><div> </div><div>-- <br />С Уважением, Login|off Nick или STork.</div><div> </div>