Как получить найденный фрагмент с помощью оператора LIKE

Есть ли возможность получить фрагмент, который нашел оператор LIKE?

Например в бд запись - [email protected]

Запрос - LIKE %[email protected]%

Нижнее подчеркивание заменяет собой любой символ, соответственно будет найден этот фрагмент - [email protected]

Есть ли возможность получить этот фрагмент?

Если нет - какая есть возможность это получить?

Требуется сделать выделение найденного текста, пытался сделать это чисто на JS, но не вышло. Возможно есть какая-то готовая библиотека для поиска на JS или на PHP - будет проводиться аналогичный LIKE поиск и выдаваться результат.


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

Автор решения: SwaD

Из БД этот фрагмент, на сколько я знаю, получить нельзя.
Ниже примерный подход, как вы можете это реализовать у себя. Собственно сам язык,php или js, тут не важен. Где формируете строку для отображения пользователю, там и делайте.

Я показываю не решение, а идею, а уже как реализовывать это, решайте сами

// Запишем искомое в виде переменных
const fixLike '[email protected]'; // Точный текст
const append = '__'; // Любые символы
// Формируете из них запрос в БД
const sqlQuery = `select email from table where email like '%${append}${fixLike}%'`;
// Полученный ответ парсите
dataFromDB.forEach((mail) => {
    const start = mail.indexOf(fixLike);
    const find = mail.slice(start - append.length, start + fixLike.length)
    console.log(find); // Показывает что найдено

    const strArr = mail.split(find);
    // Тут конечно надо предусмотреть различные варианты
    // Количество элементов  в массиве может быть много и после первого элемента, остальные элементы надо обратно склеить в строку
    // Для частного случая 'email' будет 1 элемент в массиве
    console.log(strArr[0] + '<b>' + find + '</b>' + strArr[1]); // Строка для рендера
})
→ Ссылка
Автор решения: teran

на пхп что-то подобное может быть

$txt = "some text [email protected] test [email protected] test2";
$like = "[email protected]";
$pattern = str_replace('_', '.', preg_quote($like));

$result = preg_replace("/$pattern/", '<mark>$0</mark>', $txt);

echo $result;
→ Ссылка