<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Видимо, какое то ограничение на количество обратных ссылок, вот
так работает</p>
<p>быстро:</p>
<p>my $regexp16 = qr('<br>
(3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|3\s*?(?:[^a-z]\s*?)+?r<br>
|2\s*?(?:[^a-z]\s*?)+?r)<br>
i');<br>
</p>
<br>
<div class="moz-cite-prefix">On 10/28/2016 07:17 PM, Loginoff Nick
via Moscow-pm wrote:<br>
</div>
<blockquote cite="mid:17271477671436@web1h.yandex.ru" type="cite">
<div> </div>
<div>Столкнулся с проблемой.</div>
<div> </div>
<div>В проекте есть список похожих регулярок (спам фильтр на
домены, если точнее). Все регулярки сливаются в одну и потом
идет матчинг.</div>
<div>Появилась проблема, что скрипт начал подвисать. По
результату, накидал небольшой тест:</div>
<div> </div>
<div>Если регулярок 15 шт, то даже при увеличении строки до 100
символов, они работают быстро.</div>
<div>НО! Если регулярок 16 и более, то время увеличивается вдвое
на каждое увеличение строки. Регулярка, которая совпадает, стоит
последней в списке</div>
<div> </div>
<div>Пробовал на perl 5.10.1 и 5.8.8 и там и там работает так же.</div>
<div> </div>
<div>Вот код:</div>
<div> </div>
<div>
<div>
<div>#!/usr/bin/perl</div>
<div> </div>
<div>use strict;</div>
<div>use warnings;</div>
<div> </div>
<div>use Time::HiRes;</div>
<div> </div>
<div>$| = 1;</div>
<div> </div>
<div>my $regexp15 = qr('</div>
<div>(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(2\s*?(?:[^a-z]\s*?)+?r)</div>
<div>');</div>
<div> </div>
<div>
<div>my $regexp16 = qr('</div>
<div>(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(3\s*?(?:[^a-z]\s*?)+?r)</div>
<div>|(2\s*?(?:[^a-z]\s*?)+?r)</div>
<div>');</div>
<div> </div>
</div>
<div>print "Regexp 15:\n";</div>
<div>my $str = "1 2";</div>
<div>for (my $i=0;25>=$i;$i++) {</div>
<div> $str .= " 1";</div>
<div> my $start = Time::HiRes::gettimeofday();</div>
<div> $str =~ $regexp15; </div>
<div> print "$i. " . ( Time::HiRes::gettimeofday() - $start
)."\t\t".$str."\n";</div>
<div>}</div>
<div> </div>
<div>print "\n\nRegexp 16:\n";</div>
<div>$str = "1 2";</div>
<div>for (my $i=0;25>=$i;$i++) {</div>
<div> $str .= " 1";</div>
<div> my $start = Time::HiRes::gettimeofday();</div>
<div> $str =~ $regexp16; </div>
<div> print "$i. " . ( Time::HiRes::gettimeofday() - $start
)."\t\t".$str."\n";</div>
<div>}</div>
<div> </div>
</div>
</div>
<div> </div>
<div>На выводе получаем вот это:</div>
<div>
<div>
<div>Regexp 15:</div>
<div>0. 2.59876251220703e-05 1 2 1</div>
<div>1. 1.81198120117188e-05 1 2 1 1</div>
<div>2. 3.29017639160156e-05 1 2 1 1 1</div>
<div>3. 6.29425048828125e-05 1 2 1 1 1 1</div>
<div>4. 0.000128030776977539 1 2 1 1 1 1 1</div>
<div>5. 0.000234127044677734 1 2 1 1 1 1 1 1</div>
<div>6. 0.000262975692749023 1 2 1 1 1 1 1 1 1</div>
<div>7. 0.000327825546264648 1 2 1 1 1 1 1 1 1 1</div>
<div>8. 0.000325918197631836 1 2 1 1 1 1 1 1 1 1 1</div>
<div>9. 0.000358819961547852 1 2 1 1 1 1 1 1 1 1 1 1</div>
<div>10. 0.000417232513427734 1 2 1 1 1 1 1 1 1 1 1 1 1</div>
<div>11. 0.000411033630371094 1 2 1 1 1 1 1 1 1 1 1 1 1
1</div>
<div>12. 0.000481128692626953 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1</div>
<div>13. 0.000468969345092773 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1</div>
<div>14. 0.000528097152709961 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1</div>
<div>15. 0.0005340576171875 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1</div>
<div>16. 0.000589132308959961 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1</div>
<div>17. 0.000611066818237305 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1</div>
<div>18. 0.000608921051025391 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1</div>
<div>19. 0.000670909881591797 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1</div>
<div>20. 0.000718832015991211 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1</div>
<div>21. 0.00074005126953125 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1</div>
<div>22. 0.000860929489135742 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1</div>
<div>23. 0.000805854797363281 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1</div>
<div>24. 0.000832080841064453 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1</div>
<div>25. 0.000850915908813477 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1</div>
<div> </div>
<div>Regexp 16:</div>
<div>0. 9.05990600585938e-06 1 2 1</div>
<div>1. 1.69277191162109e-05 1 2 1 1</div>
<div>2. 3.31401824951172e-05 1 2 1 1 1</div>
<div>3. 6.29425048828125e-05 1 2 1 1 1 1</div>
<div>4. 0.000123023986816406 1 2 1 1 1 1 1</div>
<div>5. 0.000240087509155273 1 2 1 1 1 1 1 1</div>
<div>6. 0.000504970550537109 1 2 1 1 1 1 1 1 1</div>
<div>7. 0.000976085662841797 1 2 1 1 1 1 1 1 1 1</div>
<div>8. 0.00191593170166016 1 2 1 1 1 1 1 1 1 1 1</div>
<div>9. 0.00382804870605469 1 2 1 1 1 1 1 1 1 1 1 1</div>
<div>10. 0.00754117965698242 1 2 1 1 1 1 1 1 1 1 1 1 1</div>
<div>11. 0.0151779651641846 1 2 1 1 1 1 1 1 1 1 1 1 1
1</div>
<div>12. 0.0302209854125977 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1</div>
<div>13. 0.0605261325836182 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1</div>
<div>14. 0.120044946670532 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1</div>
<div>15. 0.241585969924927 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1</div>
<div>16. 0.482980012893677 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1</div>
<div>17. 0.965275049209595 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1</div>
<div>18. 1.93135094642639 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1</div>
<div>19. 3.86527395248413 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1</div>
<div>20. 7.74077796936035 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1</div>
<div>21. 15.4553070068359 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1</div>
<div>22. 30.9984660148621 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1</div>
<div>23. 61.9043700695038 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1</div>
<div>24. 124.614840984344 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1</div>
<div>25. 247.499380111694 1 2 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1</div>
</div>
</div>
<div> </div>
<div> </div>
<div>-- <br>
С Уважением, Login|off Nick или STork.</div>
<div> </div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
</blockquote>
<br>
</body>
</html>