помоги написать рег. вырожение для поиска...

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

jeno

Новичок
помоги написать рег. вырожение для поиска...

вообщем, написал поиск на пхп, но не могу написать одно рег выражение...
есть большой текст, и одной слово (которое вписал в поле поиска пользователь), нужно вырезать отрывки текста с этим словом внутри... + выделить его жирным...

подскажите как сделать лучше...вот то что я написал:
Код:
/(\s?\S*\s?){0,5}".$word."(\s?\S*\s?){0,5}/i
оно чего-то ищет с учетом реестра + оч медленно работает...это оч заметно :'(
з.ы.использую preg_match_all();

если кто-то где-то видел хорошие рег. выражения такого рода, дайте плз

-~{}~ 30.11.06 19:44:

и реально ли написать такое: если оно находит в тексте слово, оно вырезает все предложение, но если предложение слишком длинное, оно обрезает его (толково обрезает,не по буквам, а по словам)
и есть ли смысл делать такое сложное вырожение? это сильно замедлит работу скрипта?
 

Фанат

oncle terrible
Команда форума
а ты ИЩЕШЬ именно этим самым выражением?!

если тебе нужен ПОИСК, то искать простое слово нужно не регом.
если тебе нужно вырезать несколько слов, то при чем тут поиск?
 

hermit_refined

Отшельник
1. вы уверены что тормозит именно эта регулярка, а не что-то другое? мерили профайлом?
2. сложные алгоритмы надо реализовывать на C и оформлять в виде расширения.
 

jeno

Новичок
1.ищу я mysql запросом (...WHERE `text` LIKE '%слово%'...)
потому полученный текст обрабатываю регуляркой...
то есть, регулярка нужна не для того чтоб найти это слово, а для того чтоб вырезать кусок текста с этим слово....

2.тормозит точно регулярка, так как без нее все работает на много быстрее...

>сложные алгоритмы надо реализовывать на C и оформлять в виде расширения.
а можно где-то прочитать статью по этому поводу? или скачать исходник?!
з.ы.в моем роспаряжении сервер с freebsd 6.0, php5, pgsql, mysql и всем что нужно для полного счастья :)

Спасибо! :)
 

Фанат

oncle terrible
Команда форума
это какого же объема текст, что регулярка заметно на нем тормозит?
 

hermit_refined

Отшельник
тормозит точно регулярка, так как без нее все работает на много быстрее...
давайте мы по-старинке всё-таки, профайлером?..

ваша регулярка, конечно, не оптимальная, но хотелось бы увидеть конкретные цифры - объем текста и время выполнения preg_match_all - прежде чем о чём-то говорить.
 

jeno

Новичок
текст:
39 слов
313 байт

с регуляркой 0.90636 сек. без нее 0.00745 сек.
з.ы.мускул возвращает только 1 поле, а если их будет 10-15 на страницу?!

сначала я отправляю mysql запрос, получаю ответ (найдено 1 поле)

потом обрабатываю полученный текст ругеляркой:

Код:
while($res=$db->sql_fetch_object($result)){
	print $res->title."<br />";
	preg_match_all("/(\s?\S*\s?){0,5}".$word."(\s?\S*\s?){0,5}/i",$res->text,$regs);
	for($i=0;$i<sizeof($regs[0]);$i++)
	{
		print $regs[0][$i]."<br />";
	}
	?><br /><br /><br /><?
}
 

hermit_refined

Отшельник
хм... да, потому что выражение слишком "многозначительное", так нельзя писать.
навскидку, даже вот такой вариант будет ощутимо быстрей: "/(\S+\s+){0,5}\S*".$word."\S*(\s+\S+){0,5}/i"

P.S. Спасибо за ценное знание - впервые воочию убедился, что неграмотно написанной регуляркой можно изнасиловать сервер.
 

jeno

Новичок
ну а подсказать еще что-то можете? помочь написать более толковое или скинуть ссылку на статью какую нить....
только не надо меня посылать на маны по рег. выражениям :) то что я написал, это максимум....имхо остальное прийдет со временем, которого у меня нет :'(
 

jeno

Новичок
ок, но меня не только скорость интересует...я хотел бы чтоб мне помогли написать рег вырожение более умнее...возможно уже есть готовые...не знаю...
может вы подскажите, как лучше сделать...я поиск в первый раз пишу (такой поиск)
хочется чтоб не просто выводились отрывки текста, а целые предложения...чтоб пользователь понимал, о чем идет речь...
 

hermit_refined

Отшельник
...я поиск в первый раз пишу (такой поиск)
хочется чтоб не просто выводились отрывки текста, а целые предложения...чтоб пользователь понимал, о чем идет речь...
и когда несколько слов, находил оптимальные куски текста для подсветки, и т.д. и т.п., "как в гугле"...
sorry, но это в раздел "работа", не иначе.
 

jeno

Новичок
то есть, не где про такое не пишут?! :(
ужас...ладно...буду думать сам...спасибо всем..
 

hermit_refined

Отшельник
то есть, не где про такое не пишут?!
есть всякие бесплатные поисковые движки, в них так или иначе эта проблема решается, поищите/скачайте/почитайте-исходники. это если подходит хоть что-нибудь.
 

jeno

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

440hz

php.ru
я давно юзаю mnogosearch, но там внешний индексатор. но зато есть морфология
 

440hz

php.ru
jeno

mnogosearch.org. как реалицация поиска (не в целях рекламы =)) php.ru
 

Deny

Новичок
Первый раз пишу поиск. Подскажите пожалуйста принцип по которому осуществляется поиск на страницах.Понятно что нужнобы каждое слово на странице имеющее смысл проиндексировать и занести в таблицу базы данных с сылкой на ту старницу на которой это слово находится. Но тогда как осуществлять переиндексацию страниц. НЕпонятно. МОЖЕТ ЧТО ПОДСКАЖИТЕ.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху