Вопрос после * или + - это флаг, который указывает какой алгоритм будет работать: жадный или не жадный.
Например для строки: "bla " регулярка /(bla\s*)/ вернет "bla" и все пробелы, в то время как /(bla\s*?)/ вернет только "bla". Аналогично /(bla\s+)/ вернет "bla" и все пробелы. в то время как /(bla\s+?)/ вернет "bla" с одним пробелом. В обоих случаях один пробел после "bla" обязателен.
29.10.2016, 11:14, "Динар Жамалиев via Moscow-pm" <moscow-pm@pm.org>:
,--Ясно изъясняться не моя фишка. Под сутью я имел другое. Для примера в контексте строки вида"bla bla bla"шаблоны вида/bla\s*?/ и/bla\s+?/ иидентичны в том смысле, что подстрока "bla " все равно будет найдена, не так ли?29 октября 2016 г., 2:41 пользователь Loginoff Nick via Moscow-pm <moscow-pm@pm.org> написал:\s* != \s+ - так что это очень сильно меняет суть шаблона. В данном контексте пробела может и не быть... Так что это не решает проблему28.10.2016, 21:44, "Динар Жамалиев via Moscow-pm" <moscow-pm@pm.org>:,--Если везде заменить \s* на \s+, что не меняет сути шаблона, результат будет мгновенным, так как квантификатор +? не отступает назад, захват либо есть максимально возможный, либо нет. В то время как *? сначала захватывает все, затем отступает Каждый дополнительный * значительно увеличивает число комбинаций. В твоем случае 16й элемент приводит к экспоненциальному увеличению возможных комбинаций28 октября 2016 г., 22:30 пользователь Artem Zhuravlev via Moscow-pm <moscow-pm@pm.org> написал:Тут скорее дело в Захвате и построение обратных ссылок для них, на 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
moscow-pm@pm.org | http://moscow.pm.org
Moscow.pm mailing list
moscow-pm@pm.org | http://moscow.pm.org--
С Уважением, Login|off Nick или STork.
--
Moscow.pm mailing list
moscow-pm@pm.org | http://moscow.pm.org
Moscow.pm mailing list
moscow-pm@pm.org | http://moscow.pm.org
-- Moscow.pm mailing list moscow-pm@pm.org | http://moscow.pm.org