|
|
|
| Нужно оформить в выводе результата поиска, кусок текста содержащего ключевое слово.
Мне представляется это регулярным выражением:
<?
$pattern = '(Любое к-во символов не больше 100) (Первое вхождение ключевого слова в текст) (Любое кол-во символов не больше 100)';
$text = preg_replace($pattern,'\\1<strong>\\2</strong>\\3',$text);
?>
|
Помогите составить данное регулярное выражение.
Или может есть лучше методы? | |
|
|
|
|
|
|
|
для: Axxil
(27.12.2006 в 12:57)
| |
<?php
$word = 'Слово';
$pattern = "/(.{0,100})($word)(.{0,100})/isU";
// так должно работать
?>
|
| |
|
|
|
|
|
|
|
для: ЯR
(27.12.2006 в 13:02)
| | Не работает :(((
Вся статья выводится
И ещё надо обратить внимание на то что обрабатывать нужно только 1 вхождение ключевого слова. Всё остально должно обрезаться | |
|
|
|
|
|
|
|
для: 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";
|
| |
|
|
|
|
|
|
|
для: 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));
?>
|
| |
|
|
|
|
|
|
|
для: Axxil
(27.12.2006 в 15:10)
| | А чем Вас не устроили экспы, что я привел?
Первая - то что просили, вторая обрезает текст не 100 символов туда/сюда, а ~100, слова не режет | |
|
|
|
|
|
|
|
для: kasmanaft
(27.12.2006 в 16:02)
| | И первое и второе решени отлично справляются с задачей.
Ваше решение гораздо красивее моего, кто ж спорит. :)
Просто привёл свой вариант...
PS цифра 100 названа от балды и может варьироваться +/-10% спокойно.
PPS Конечно идеально было бы именно по словам делить. Т.е. скажем по 20 слов вправо и влево...
Но тут одним регэкспом не обойдёшься скорее всего... Хотя может возможно? | |
|
|
|
|
|
|
|
для: 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 может быть частью какого-то слова, во втором нет \\
|
>> Просто привёл свой вариант...
А я подумал, что Вы мое решение просто проигнорировали, аля "и сам уже сделал" :) | |
|
|
|
|
|
|
|
для: kasmanaft
(27.12.2006 в 19:32)
| | Отлично работает. Большое спасибо. | |
|
|
|