Задать вопрос
@ilall

Как подсветить слова в тексте?

Добрый день.

Есть текст (html с простейшей структурой - абзацы, форматирование текста, всё), нужно в нём подсветить (обернуть в span) слова по регулярному выражению.

Конечно есть очевидное решение проблемы в лоб:
$regex_to_wrap = [ ... ];
foreach( $regex_to_wrap as $regex ) {
  $text = preg_replace( $regex,  '<span>$0</span>', $text );
}


В таком варианте есть случаи, когда на выходе появляются вложенные/пересекающиеся теги, самое простое:
$regex_to_wrap = [ '/111/', '/11/' ];
$text = 'foo 111 bar';

/* ... */

$text = 'foo <span><span>11</span>1</span> bar';


В общем случае, нужно обернуть текст в span только если этот текст уже не обёрнут в какой-либо тег. Насколько я понимаю принцип, нужно через lookbehind смотреть на наличие открывающего тега, но моих знаний регулярных выражений не хватает на такие вещи.

Возможно, регулярки в принципе не подходят для такой задачи, и нужно использовать другой подход?
В голову приходит разбор дерева через DomDocument, фильтрация нод по DOMText, отбрасывая остальное, и замена только по ним. Нормальное ли это решение?
  • Вопрос задан
  • 166 просмотров
Подписаться 1 Средний 2 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
ematveev
@ematveev
PHP разработчик / руководитель / писатель
можно проще, проверять например наличие подстроки '<', есть ли наличие оборачивающего тега в тексте
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽