Поиск текста в строке?

Статус
В этой теме нельзя размещать новые ответы.

seva2

Партнер PHPClub.ru
Поиск текста в строке?

Народ что лучше юзать?
eregi
strstr
или ?

По быстродействию?
 

440hz

php.ru
если длина поисковой строки не превышает 32 символа есть боле быстрые поиски чем стандартные. скорость превышает н порядки...
 

440hz

php.ru
Автор оригинала: seva2
440hz например?
думаю в стндартных библиотеках его нет. =)

я реализовывал такой алгоритм на C и лет 10 назад. исходников сейчас под рукой нет, но там суть такова, что при поиске запоминается в битовой 32-х разрабной маске кол-во правльно найденных совпадений и при неудаче/совпадении битово сдигается.

при поисках в больших объемах текстовой информации прирост по скорости был на порядки больше чем у strstr().
 

phprus

Moderator
Команда форума
440hz
Можно поподробнее? Хотя бы названия алгоритмов, которые если их реализовать на php будут быстрее стандартных функций на строках короче 32 символов.

поисковой строки
Это строка которую ищут или строка В которой ищут?

Update:
но там суть такова
Не могли бы вы чуть более подробно описать алгоритм?
 

440hz

php.ru
Это строка которую ищут или строка В которой ищут?
до 32 это то, что ищут. чем длинее поисковая строка - тем быстрее

я дома посмотрю и отпишусь.


там суть такова. если мы нашли 10 правильных вхождений и 11-ое не проавильное, то мы знаем, что можно перейти на 10 символов вперед там где ищем, а не перебирать по одну 10 раз.

я точно не помню, могу сморозить, но как-то так было...
 

hermit_refined

Отшельник
phprus
есть еще очень хороший обзор строковых алгоритмов у Graham Stephen - "Анализ строк" / String Search
которые если их реализовать на php
на php это, конечно, безумие.
тем более, что они так и просятся быть реализованными на C.
 

phprus

Moderator
Команда форума
hermit_refined
на php это, конечно, безумие.
Вопрос то был про поиск в строке на php вот по этому я и спросил про реализацию на php.
А вообще-то они действительно так и просятся быть реализованными на C.

Graham Stephen - "Анализ строк" / String Search
Спасибо за название. Надо бы погуглить в этом направлении.
 

seva2

Партнер PHPClub.ru
Народ так мне ответьте что лучше? Текст большой) это код html страницы!
 

Андрейка

Senior pomidor developer
lorien
ну да, копирование куска памяти это простая операция, проще некуда
 

phprus

Moderator
Команда форума
lorien
Цитата из документации к strstr:
Замечание: Если нужно лишь определить, встречается ли подстрока needle в haystack, используйте функцию strpos(), которая работает быстрее и потребляет меньше памяти.
Читать до полного просветления.
 

lorien

Новичок
Господа, я написал, что регекспы медленнее strstr, вы не согласны?
 

lorien

Новичок
Андрейка
Окей, вот код теста
PHP:
<?php

class Timer
{
    var $time_start;

    function time()
    {
        return array_sum(explode(' ',microtime()));
    }

    function start()
    {
        $this->time_start = $this->time();
    }

    function stop()
    {
        return $this->time() - $this->time_start;
    }
}

function rnd_string( $length )
{
    $str = '';
    for( $i = 0; $i < $length; $i++ ) {
        $str .= chr(ord('a')+mt_rand(0,25));
    }
    return $str;
}
$timer = & new Timer();
$timer->start();
for ( $i = 0; $i < 1000; $i++ ) {
    strstr(rnd_string(100),rnd_string(10));
}
print "strstr: ".$timer->stop()."\n";

$timer->start();
for ( $i = 0; $i < 1000; $i++ ) {
    preg_match('{'.rnd_string(10).'}',rnd_string(100));
}
print "preg_match: ".$timer->stop()."\n";

?>
Результаты запуска:
[root@lorien /web]# php test.php
strstr: 0.21084094047546
preg_match: 0.26589488983154
Теперь хотелось бы увидеть ваши тесты, которые показывают, что strstr тормознее регекспов.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху