@matperez

Нет ли готовой библиотеки для подсветки найденного текста?

Здравствуйте!

Мне нужно подсвечивать найденные куски текста на странице. Например из текста "мама мыла раму в темной комнате" и ключе поиска "му" нужно получить что-то вроде "мыла раму в темной...". При этом справа, слева от найденного текста должно остаться определенное количество слов. Может быть кто встречал уже готовую библиотеку или просто функцию для этих целей?

//upd хочу что-то вроде highlightText($text, $key, $wordsCount)
  • Вопрос задан
  • 319 просмотров
Решения вопроса 2
@matperez Автор вопроса
На всякий случай, нормальный ответ
/**
     * @param string $text
     * @param string $key
     * @param int $wordsCount
     * @return array
     */
    public static function extractMatches($text, $key, $wordsCount = 10)
    {
        $quote = preg_quote($key);
        $regex = '/(?:[^ ]+ ){0,'.$wordsCount.'}[\p{L}\p{Nd}-\.]*('.$quote.')[\p{L}\p{Nd}-\.]*(?: [^ ]+){0,'.$wordsCount.'}/iu';
        $matches = [];
        preg_match_all($regex, $text, $matches);
        return count($matches[0]) > 0 ? $matches[0] : [];
    }

    /**
     * @param string $text
     * @param string $key
     * @param string $template
     * @return array
     */
    public static function highlight($text, $key, $template = '<i>\1</i>')
    {
        $fragments = [];
        $matches = self::extractMatches($text, $key);
        $quote = preg_quote($key);
        foreach ($matches as $match) {
            $fragments []= preg_replace("/($quote)/i", $template, $match);
        }
        return $fragments;
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы