<div>Вопрос после * или + - это флаг, который указывает какой алгоритм будет работать: жадный или не жадный.</div><div> </div><div>Например для строки: "bla " регулярка /(bla\s*)/ вернет "bla" и все пробелы, в то время как /(bla\s*?)/ вернет только "bla". Аналогично /(bla\s+)/ вернет "bla" и все пробелы. в то время как /(bla\s+?)/ вернет "bla" с одним пробелом. В обоих случаях один пробел после "bla" обязателен.</div><div><br /></div><div><br /></div><div>29.10.2016, 11:14, "Динар Жамалиев via Moscow-pm" <moscow-pm@pm.org>:</div><blockquote type="cite"><div dir="ltr"><div>Ясно изъясняться не моя фишка. Под сутью я имел другое. Для примера в контексте строки вида </div><div> "bla bla bla"  </div><div>шаблоны вида </div><div> /bla\s*?/ и</div><div><div> /bla\s+?/ и</div><div>идентичны в том смысле, что подстрока "bla " все равно будет найдена, не так ли?</div><div><br /></div></div><div><div>29 октября 2016 г., 2:41 пользователь Loginoff Nick via Moscow-pm <span dir="ltr"><<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>></span> написал:<br /><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex;"><div>\s* != \s+ - так что это очень сильно меняет суть шаблона. В данном контексте пробела может и не быть... Так что это не решает проблему</div><div> </div><div>28.10.2016, 21:44, "Динар Жамалиев via Moscow-pm" <<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>>:</div><blockquote type="cite"><div><div><div>Если везде заменить \s* на \s+, что не меняет сути шаблона, результат будет мгновенным, так как квантификатор +? не отступает назад, захват либо есть максимально возможный, либо нет. В то время как *? сначала захватывает все, затем отступает Каждый дополнительный * значительно увеличивает число комбинаций. В твоем случае 16й элемент приводит к экспоненциальному увеличению возможных комбинаций</div><div> <div>28 октября 2016 г., 22:30 пользователь Artem Zhuravlev via Moscow-pm <span><<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>></span> написал:<blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);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" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" target="_blank">http://moscow.pm.org</a><br /> </blockquote></div></div></div></div>,<span>--<span><br />Moscow.pm mailing list<br /><a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" target="_blank">http://moscow.pm.org</a></span></span></blockquote><div> </div><div> </div><div><div><div>-- <br />С Уважением, Login|off Nick или STork.</div><div> </div></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></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><br /></span></blockquote>