<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>