Как в PHP заменить подстроки и исключить из замены некоторые теги? Приветствую
Есть HTML, для примера такой (сразу в переменной):$text = '
Lorems ipsum dolor sit amet
Loremi ipsum dolor sit amet
Loremis ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit amet
';
Нужно заменить по регулярке "склонения" слова "Lorem". В тексте их встречается несколько: Lorem, Lorems, Loremi, Loremis.
На ум приходит простое решение:$search = '/(\bLore.+?\b)/ui';
$replace = trim('$1');
$text = preg_replace($search, $replace, $text);
И, вроде бы, работает, но есть одна проблема — на знаю как исключить замены в тегах заголовков (h1, h2, h3).Вопросы:
— корректно ли меняю неполную словоформу?
— как исключить замены в тегах заголовков (исключить все что внутри h1, h2, h3)?

21 Авг 2019 в 06:23
258 +1
0
Ответы
1

Для того чтобы исключить замены внутри тегов заголовков (h1, h2, h3), нужно модифицировать регулярное выражение, чтобы оно не затрагивало содержимое этих тегов.

Для исключения замен внутри тегов h1, h2, h3 можно использовать negative lookahead. Например, так:$search = '/\bLore[^<]*?(?<!<\/h[1-3]>)\b/iu';

Относительно корректности замены неполной словоформы "Lorem" на "Lorem" - это уже зависит от ваших требований. Если вам подходит такое решение, то оно корректно.

Вот как можно изменить ваш код с учетом указанных выше пунктов:$search = '/\bLore[^<]*?(?<!<\/h[1-3]>)\b/iu';
$replace = '$0';
$text = preg_replace($search, $replace, $text);

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир