<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
+?, *? работают одинаково, ? отключает жадность (отступать назад им
бессмысленно), а вот ++, *+ - да, не откатываются назад при
неудаче.<br>
<br>
<div class="moz-cite-prefix">On 10/28/2016 09:44 PM, Динар Жамалиев
via Moscow-pm wrote:<br>
</div>
<blockquote
cite="mid:CAAKGKyCUHakqDVu7Vw=S_P4hLoi2w2Di+5Bd-XHt8bGg17X80g@mail.gmail.com"
type="cite">
<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
moz-do-not-send="true" 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 moz-do-not-send="true" href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a>
| <a moz-do-not-send="true" href="http://moscow.pm.org"
rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
<br>
</blockquote>
</div>
<br>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
</blockquote>
<br>
</body>
</html>