Как в 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
290 +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 Апр 2024 в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир