weranda
@weranda

Как заменить подстроку, которая не внутри определенных тегов?

Приветствую.
Не знаю как подступиться к задаче.

Есть HTML:
<!--Он может быть таким:-->
<p>111 222 333</p>
<li>111 222 333</li>
<h1>111 222 333</h1>
<h2>111 222 333</h2>
<strong>111 222 333</strong>
<p><strong>111 222 333</strong></p>
<p>111 <a href="">222</a> 333</p>

<!--Он может быть таким:-->
<p>111 222 333</p><li>111 222 333</li><h1>111 222 333</h1><h2>111 222 333</h2><strong>111 222 333</strong><p><strong>111 222 333</strong></p>

<!--В общем, может быть любым-->


Задача: сделать замены в тексте по определенному формату (для примера):
— 222 меняем на <a href="#link">222</a>;
— меняем везде, кроме совпадений внутри тегов <h1> и <a>;
— найденные совпадения меняем только один раз.

Не понимаю как исключить из поиска определенные теги, т. е. делать замены везде, кроме указанных тегов.
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
@dodo512
https://regex101.com/r/hFBSmY/1
preg_replace('~<(a|h1)\b.*?</\1>(*SKIP)(*F)|(222)~si', '<a href="#link">\\2</a>', $str);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы