<div dir="ltr">Если везде заменить \s* на \s+, что не меняет сути шаблона, результат будет мгновенным, так как квантификатор +? не отступает назад, захват либо есть максимально возможный, либо нет. В то время как *? сначала захватывает все, затем отступает Каждый дополнительный * значительно увеличивает число комбинаций. В твоем случае 16й элемент приводит к экспоненциальному увеличению возможных комбинаций</div><div class="gmail_extra"><br><div class="gmail_quote">28 октября 2016 г., 22:30 пользователь Artem Zhuravlev via Moscow-pm <span dir="ltr"><<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Тут скорее дело в Захвате и построение обратных ссылок для них, на 16+ явно замедляется <br><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 class="gmail_extra">
</div></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br></div>