Пытаюсь написать простой поиск для сайта на php, и вроде бы все получается и поиск ищет, но хочется сделать так что бы слово которое ищу выделялось красным, и я это сделал, но выводит у меня весь текст статьи и выделяется слово, я хочу что бы выводило кратко например 5 слов до найденного слова и 5 слов после.
Вот мой код:
$query = "Слово";
$text = "Много текста";
$needle = $query;
$text = explode($needle, $text);
$text = implode('<b style="color: red;">' . $needle . '</b>', $text);
echo "$text";
Подскажите как это реализовать.
PHP
Добрый день, у меня вопрос по php
preg_replace('/'.$needle.'/', '' . $needle . '', $text)
Найди место слова в тексте и вырежи из текста участок из пяти слов до этого слова и пяти слов после. Например, так:
preg_match('#(?:\w+\W+){0,5}\b'. $needle . '\b(?:\W+\w+){0,5}#su', $text, $result);
вот это
$needle = $query;
ваще феерично!
$needle = $query;
ваще феерично!
Можно вот так:
На тесте такой код работает корректно:
Немного о регулярке:
Конструкция \w соответствует любой букве от A до Z в верхнем и нижнем регистрах и цифрам 0-9.
Соответственно ищем минимум одну букву и минимум один пробел/точку/запятую после него. Всё это повторяем от 0 до 5 раз (т.к. поисковой запрос может оказаться в самом начале статьи, и пяти слов там может не набраться; по умолчанию выбирается именно 5 слов) – это делается конструкцией {0,5}
echo preg_replace("/([\wа-яА-ЯёЁ]+[\s\.\,\:\;]+){0,5}({$query})([\s\.\,\:\;]+[\wа-яА-ЯёЁ]+){0,5}/","$0",$text);
На тесте такой код работает корректно:
$query = "commodo";
$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
echo preg_replace("/([\wа-яА-ЯёЁ]+[\s\.\,\:\;]+){0,5}({$query})([\s\.\,\:\;]+[\wа-яА-ЯёЁ]+){0,5}/","$0",$string);
Вывод: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Немного о регулярке:
([\wа-яА-ЯёЁ]+[\s\.\,\:\;]+)Этот кусок отвечает за поиск слова ДО поискового значения + пробел, запятая, точка, двоеточие или точка с запятой после окончания слова.
Конструкция \w соответствует любой букве от A до Z в верхнем и нижнем регистрах и цифрам 0-9.
а-яА-ЯёЁИщет так же вхождения на кириллице. ёЁ – отдельно, поскольку не включено в общий набор алфавита при указании "а-яА-Я".
Соответственно ищем минимум одну букву и минимум один пробел/точку/запятую после него. Всё это повторяем от 0 до 5 раз (т.к. поисковой запрос может оказаться в самом начале статьи, и пяти слов там может не набраться; по умолчанию выбирается именно 5 слов) – это делается конструкцией {0,5}
({$query})Это блок поиска конкретного запроса, то есть от чего мы и отталкиваемся.
([\s\.\,\:\;]+[\wа-яА-ЯёЁ]+){0,5}Аналогично первой части, в которой мы ищем слово+символ, однако в этом случае наоборот – ищем сначала символ, потом слово. Также от 0 до 5 раз.
Похожие вопросы
- Вопрос к PHP-программистам и людям с опытом создания telegram-ботов. Спасибо заранее!
- Вопрос по PHP фреймворкам
- Вопрос по PHP, связанный с локальным хостом.
- Вопрос начинающего программиста Python\PHP
- PHP Polling ChatGPT
- Вопрос людям знающим php.
- Как оптимизировать структуру сайта php. на готовом шаблоне
- Не работает PHP include на хостинге
- Хеширование пароля php
- Подскажите хороший курс по PHP практике?
При использовании модификатора 'u' класс '\w' означает букву любого алфавита, входящего в Unicode, цифру или '_'. А класс '\W' - любой символ, отличный от вышеперечисленных.