Найти из большого текста только кусочек и 50 символов справа от результата на php
Есть файл , превратить его пытался по разному и в строку для поиска используя массив и испоьлзуя использовал такой подход
// Поиск слова и выввод блока где слово
$b = file_get_contents("87661398 project_id 340.txt");
$b = preg_split("~\\n(?=\\s+)~",$b);
$slovo = ' 0,2 процента цены Контракта';
// Выводит не массив строки где результат запроса а только чисто тот блок который нужен
foreach(preg_grep("~$slovo~ui",$b) as $v){
echo $v;
}
и если в текстовом документе мало текста то он ищет и выводит круто только тот блок результата где этот что в запросе написано и выводит, а мне надо сделать желательно на php что бы был запрос как поиск например я делаю query LIKE %$data%
как то так но он отображает на выходе все что есть в теле результата, а мне надо найти в результате только те слова ну которые в запросе, и например 70 или не суть символов правее и всё а не весь документ размером в 40 страниц , как это сделать использовать str len но проблема в том что регламента где находится нужный текст нет, и заранее не просчитаешь длинну текста что бы как то по символам играть, но надо для этого ещё как то найти слово в тексте (резульате) скриптом на php а откуда данные будут txt или БД не суть, но вот так уже неделю данные ищу как сделать
или вот нашёл скрипт который скидывает длинну но только слева направа а мне надо в другую сторону а можетбыть и сработает,но непонятно как именно на php найти нужный текст и выделить его но в результате оставить при выводе тоьлко начало и то что в нужных мне параметрах то есть результат запроса
function preview_text($value, $limit = 300)
{
$value = stripslashes($value);
$value = htmlspecialchars_decode($value, ENT_QUOTES);
$value = str_ireplace(array('<br>', '<br />', '<br/>'), ' ', $value);
$value = strip_tags($value);
$value = trim($value);
if (mb_strlen($value) < $limit) {
return $value;
} else {
$value = mb_substr($value, 0, $limit);
$length = mb_strripos($value, ' ');
$end = mb_substr($value, $length - 1, 1);
if (empty($length)) {
return $value;
} elseif (in_array($end, array('.', '!', '?'))) {
return mb_substr($value, 0, $length);
} elseif (in_array($end, array(',', ':', ';', '«', '»', '…', '(', ')', '—', '–', '-'))) {
return trim(mb_substr($value, 0, $length - 1)) . '...';
} else {
return trim(mb_substr($value, 0, $length)) . '...';
}
return trim();
}
}
$text = '
Текст превью (или прехедер) — это небольшой кусочек текста!
Который «подтягивается» из тела сообщения, и обычно он отображается
под полями с именем отправителя и темой сообщения.
';
echo preview_text($text, 60);
echo preview_text($text, 80);