Удалить все теги в подзаголовках ...
и ....
Необходимо удалить с помощью регулярных выражений (на PHP) все теги, которые встречаются в подзаголовках между тегами <h2>...</h2> и <h3>....</h3>
.
Пример текста:
<p>слово1 слово2</p>
<h2>Какой-то <strong>подзаголовок <i class="red">второго</i></strong> уровня
</h2>
<h3><u id="green">Другой <b>подзаголовок</b> третьего</ul> уровня </h3>
<p>текст</p>
На выходе получить:
<p>слово1 слово2</p>
<h2>Какой-то подзаголовок второго уровня
</h2>
<h3>Другой подзаголовок третьего уровня </h3>
<p>текст</p>
Ответы (2 шт):
Автор решения: ksa
→ Ссылка
Необходимо удалить с помощью регулярных выражений (на PHP) все теги, которые встречаются в подзаголовках между тегами
h2
иh3
Не знаю есть ли в ПХП рекурсивность в применении регулярки... Но в JS ее нет. Проблему ТС можно решить вот так.
let t = `<p>слово1 слово2</p>
<h2>Какой-то <strong>подзаголовок <i class="red">второго</i></strong> уровня
</h2>
<h3><ul id="green">Другой <b>подзаголовок</b> третьего</ul> уровня </h3>
<p>текст</p>`
const r = /(?<=<h\d.+?)<(\S+).*?>(.+?)<\/\1>/g
const rt = /<(h\d).+?<(?=.+?<\/\1)/
while (rt.test(t)) {
t = t.replace(r, '$2')
}
console.log(t)
Автор решения: Qwertiy
→ Ссылка
Приблизительно так (можно лучше, но надо химичить): tio.run
<?php
$s = '<p>слово1 слово2</p>
<h2>Какой-то <strong>подзаголовок <i class="red">второго</i></strong> уровня
</h2>
<h3><u id="green">Другой <b>подзаголовок</b> третьего</ul> уровня </h3>
<p>текст</p>';
print preg_replace('~</?(?!h\d\b)\w+\b[^>]*>(?=((?!<h\d\b).)*</h\d>)~mis', '', $s);