Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Регулярные выражения


Автор: Opik 25.1.2005, 15:16
Я например привык использовать (.*), даже в тех случаях, где могут быть только цифры или только буквы.
Занижает ли это "жадное" выражение скорость по сравнению, например, с ([0-9]+) ?
Буду благодарен и за интересную инфу по этому поводу smile

Автор: rMaveric 25.1.2005, 15:29
озреваю, что выборка всех символов будет работать более быстро и использовать меньше ресов... сравнивать то несчем... А там помимо всего еще и проверка допустимого диапазона.

Автор: Mal Hack 25.1.2005, 16:38
Opr
очень много зависит от тогокакой в целом рэг и какой текст и что надо получить.
Так уж конкретно сказать нельзя...

Автор: Opik 25.1.2005, 17:47
Mal Hack
preg_match_all("(.*), (9 раз)");
текст, немного HTML и далее под шаблон.

Автор: Mal Hack 25.1.2005, 18:16
Цитата(Opr @ 25.1.2005, 17:47)
текст, немного HTML и далее под шаблон.

Я в глобальном имел ввиду smile

Автор: Irokez 25.1.2005, 20:09
Код

<?php
$testtime1=0;
$testtime2=0;
$m1=array();
$m2=array();
set_time_limit(0);
for($test=1; $test<=10; $test++)
{
   $bigstr='';
   for($i=0; $i<=1000; $i++)
   {
       for($j=0; $j<=100; $j++)
           $bigstr.=chr(rand(48, 122));
       $bigstr.="\n";
   }
   $b=chr(rand(48, 122));
   $time1=microtime();
   preg_match_all("/$b(.*)$b/", $bigstr, $m1);
   $time2=microtime();
   preg_match_all("/$b([0-9]+)$b/", $bigstr, $m2);
   $time3=microtime();
   echo ' 1:'.$testtime1+=$time2-$time1;
   echo ' 2:'.$testtime2+=$time3-$time2;
   echo '<br>';
   flush();
}
?>

Добавлено @ 20:10
1:0.007076 2:0.001406
1:0.013041 2:0.0025580000000001
1:0.020454 2:0.0037200000000001
1:0.027139 2:0.0050360000000001
1:0.035905 2:0.0061780000000001
1:0.0441 2:0.0091880000000001
1:0.050768 2:0.010704
1:0.056664 2:0.011666
1:0.062725 2:0.013148
1:0.069188 2:0.014619

Автор: Mal Hack 25.1.2005, 20:27
Irokez
У тебя получение времени неправильное...

Автор: Irokez 25.1.2005, 20:41
возможно, между делом писал, а где именно ошибка?
кстати я менял местами тестируемые строки, результат был тот же - Opr прав - жадное выражение (.*) занимает больше времени

Автор: Mal Hack 25.1.2005, 20:47
Цитата(Irokez @ 25.1.2005, 20:41)
а где именно ошибка?

У тебя микротайм вернет: илисекунды пробел tme();... Вот и думай что ты потом высчитаваешь...
Код

function getmicrotime()
 {
  $mt = explode( " ", microtime() );
  return ( (float)$mt[0] + (float)$mt[1] );
 }



Автор: Irokez 25.1.2005, 21:06
а сорри, ну тогда заместо microtime() , используем getmicrotime(), результат такой же
ЗЫ я просто тогда был уверен в результате, потому что сначала использовал просто time()

Автор: Wowa 25.1.2005, 23:25
Цитата(Opr @ 25.1.2005, 13:16)
Занижает ли это "жадное" выражение скорость по сравнению, например, с ([0-9]+) ?

Скорее не занижает, а повышает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)