Найти из большого текста только кусочек и 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);

Ответы (0 шт):