Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Цитата из статьи
 
 автор: Axxil   (27.12.2006 в 12:57)   письмо автору
 
 

Нужно оформить в выводе результата поиска, кусок текста содержащего ключевое слово.
Мне представляется это регулярным выражением:

<?
$pattern 
'(Любое к-во символов не больше 100) (Первое вхождение ключевого слова в текст) (Любое кол-во символов не больше 100)';
$text preg_replace($pattern,'\\1<strong>\\2</strong>\\3',$text);
?>

Помогите составить данное регулярное выражение.
Или может есть лучше методы?

   
 
 автор: ЯR   (27.12.2006 в 13:02)   письмо автору
 
   для: Axxil   (27.12.2006 в 12:57)
 


<?php
$word 
'Слово';
$pattern "/(.{0,100})($word)(.{0,100})/isU";

// так должно работать
?>

   
 
 автор: Axxil   (27.12.2006 в 13:29)   письмо автору
 
   для: ЯR   (27.12.2006 в 13:02)
 

Не работает :(((
Вся статья выводится
И ещё надо обратить внимание на то что обрабатывать нужно только 1 вхождение ключевого слова. Всё остально должно обрезаться

   
 
 автор: kasmanaft   (27.12.2006 в 14:46)   письмо автору
 
   для: Axxil   (27.12.2006 в 13:29)
 

Заменяется на replacement строка, попавшая под рег. выражение ... то есть сто символов слева/справа заменяются практичести сами на себя ... Можно либо воспоьзоваться функцией preg_match, либо сделать так, чтобы под выражение попал весь текст:

$pattern = "/.*?(.{0,100})($word)(.{0,100}).*$/is";
// $pattern = "/.*?\b(.{0,100})($word)(.{0,100})\b.*$/is";

   
 
 автор: Axxil   (27.12.2006 в 15:10)   письмо автору
 
   для: kasmanaft   (27.12.2006 в 14:46)
 

Вот так получилось:

<?
$pattern 
"|(.*)(.{0,300})($word)(.*)|isU";
$text preg_replace($pattern,'\\2<strong>\\3</strong>\\4',$text,1); 
$text substr($text,0,600+strlen($word));
?>

   
 
 автор: kasmanaft   (27.12.2006 в 16:02)   письмо автору
 
   для: Axxil   (27.12.2006 в 15:10)
 

А чем Вас не устроили экспы, что я привел?
Первая - то что просили, вторая обрезает текст не 100 символов туда/сюда, а ~100, слова не режет

   
 
 автор: Axxil   (27.12.2006 в 17:04)   письмо автору
 
   для: kasmanaft   (27.12.2006 в 16:02)
 

И первое и второе решени отлично справляются с задачей.
Ваше решение гораздо красивее моего, кто ж спорит. :)
Просто привёл свой вариант...

PS цифра 100 названа от балды и может варьироваться +/-10% спокойно.
PPS Конечно идеально было бы именно по словам делить. Т.е. скажем по 20 слов вправо и влево...
Но тут одним регэкспом не обойдёшься скорее всего... Хотя может возможно?

   
 
 автор: kasmanaft   (27.12.2006 в 19:32)   письмо автору
 
   для: Axxil   (27.12.2006 в 17:04)
 

Впринципе можно. Составил кое-что, но не мешало бы поэкспериментировать...
А вообще должно работать!

<?
// * * * * * * * * \\
$pattern "/((\w+\W+){0,5})($word)((\W*\w+?\W*){0,5}?)/isU";
// $pattern = "/((\w+\W+){0,5})(\b$word\b)((\W*\w+?\W*){0,5}?)/isU";
preg_match($pattern$text$regs);
echo 
$regs[1].'<b>'.$regs[3].'</b>'.$regs[4];
// в первом $word может быть частью какого-то слова, во втором нет \\


>> Просто привёл свой вариант...
А я подумал, что Вы мое решение просто проигнорировали, аля "и сам уже сделал" :)

   
 
 автор: Axxil   (29.12.2006 в 13:22)   письмо автору
 
   для: kasmanaft   (27.12.2006 в 19:32)
 

Отлично работает. Большое спасибо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования