После найденного слова отсечь по сторонам определенное кол-во символов

DenVeroid

Новичок
После найденного слова отсечь по сторонам определенное кол-во символов

Суть вопроса такова, нужно найти из текста определённое слово, и от этого слова оставить несколько символов, напромер 100 символов, остальные отсечь, тоесть сделать точно также как в поисковых системах например как на яндексе, найденое слово выделяется жирным


то что я сделал это из определённого текста сделал выделение жирным, но вот как от этого выделенного слова оставить столько символов сколько указанно из переменной $delete_simvol немогу разобраться

PHP:
<?php
$content = "В данный форум переносятся все «мусорные» темы, которые не представляют
никакой ценности для дальнейшего использования (в частности, их нежелательно находить в Поиске).
Если ваша тема попала сюда и для вас это — полная неожиданность, вероятно, стоит
задуматься над последними словами модератора, которые он сказал перед переносом топика.";

$query='полная неожиданность';
$delete_simvol = 30;

echo $content=str_replace($query,'<b>'.$query.'</b>',$content);

?>

в данном случии должно получиться примерно так

...Если ваша тема попала сюда и для вас это — <b>полная неожиданность</b>, вероятно, стоит
задуматься над последними...

понимаю что нужно ещё использовать такие функции как substr, strlen, strpos
но честно сказать неполучается, может кто уже делал подобное подскажите
 

Panchous

Павел
[m]substr[/m], что непонятно?
вырезать из строки заданное кол-во символов, начиная с 0-го
 

DenVeroid

Новичок
Panchous, извини, я наверное немного неправельно выразился, нужно отсечь не от того слова по которому был произведен поиск, его какрас нужно отсавить в том виде в каком он есть, нужно отсечь текст рядом с этим словом, и оставить примерно 30 символов по сторонам
 

kruglov

Новичок
Ну я делал.
Только я еще старался, чтобы крайние слова целые оставались.

Пусть x - strpos нашей строки, которую выделять.

x-100 - начало
x+100+strlen(подстроки) - конец
Самое простое в цикле подвинуть границы, чтоб крайние слова целые были (дойти до небукв-нецифр)

Отрезать.

Выделить болдом.
 

DenVeroid

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

PHP:
echo $content = preg_match("\s(\S*.{30}".$query.".{30}\S*)\s", $content);
но при запуске выводиться ошибка
Warning: Delimiter must not be alphanumeric or backslash in c:\server\www\u.php on line 19

указывая на эту строку, что я не так сделал?
 

kruglov

Новичок
Во-первых, preg_replace, во вторых, где слеши по бокам регулярного выражения, если уж preg?
 

DenVeroid

Новичок
упс, извиняюсь, вот поправил

PHP:
echo $content=preg_replace("/\s(\S*.{30}".$query.".{30}\S*)\s/","<b>".$query."</b>",$content);
но тут тоже чет ничего не происходит, или я опять чет не так сделал, поправте меня пожалуйста, с регулярками я несильён пока

-~{}~ 25.10.05 23:36:

всем спасибо что направили на нужный путь, скрипт я написал

PHP:
function substr2($content, $query) {
preg_match("/\s+[\w\W]{0,80}".$query."[\w\W]{0,80}\s+/i",$content,$m);
return '...'.str_replace($query,'<b>'.$query.'</b>',$m[0]).'...';
}
всё работает как и хотел :)

-~{}~ 26.10.05 14:27:

kruglov, твой вариант тоже интересен, немогбы сам код предоставить?

так то вроде где понятно но а где и не понятно, кстати как насчёт производительности если говоришь цикл делать?
 

kruglov

Новичок
Ну, код большой и неинтересный, к тому же еще кое-что делающий...
 

DenVeroid

Новичок
kruglov, окей

кстати я тут заметил фишку, если начинаю производить поиск допустим по слову которое начинается в начале текста или в самом конце, в данном случии если произвести по слову "В данный" или по слову "топика." то почемуто поиск по ним не происходит, ищет только что находиться в середине

и ещё, если делаю поиск по слову "Неожиданность" на сервере у провайдера, почемуто не находит а если ищю так "неожиданность" то находит, почемуто регистрозависим получается, хотя проверяю у себя дома всё нормально
 

kruglov

Новичок
DenVeroid
Локаль.

setlocale (LC_ALL, 'ru_RU.CP1251');

-~{}~ 28.10.05 10:04:

А слово в начале не находится, потому что регулярное выражение такое (\s+ - 1 или больше пробелов).

Могу для простоты посоветовать добавлять по пробелу в начало и конец перед поиском.

Или модифицировать регулярное выражение

-~{}~ 28.10.05 10:09:

p.s. Еще это регулярное выражение не обрабатывает знаки препинания...
 

DenVeroid

Новичок
kruglov, огромное спасибо, сразу на два вопроса ответил

а что значить не обрабатывает знаки препинания? это если поним делать поиск, но вроде этого никто не делает, или я нетак понимаю?
 
Сверху