Поиск и замена текста между тегами в PHP
Существует текст, внутри которого может быть такая разметка:
<ul>
элемент1<br />
элемент2<br />
элемент3<br />
элемент4<br />
элемент5
</ul>
На PHP в текте нужно обнаружить все теги <ul></ul> и обернуть в них строки в <li></li>, чтобы получилось:
<ul>
<li>элемент1</li>
<li>элемент2</li>
<li>элемент3</li>
<li>элемент4</li>
<li>элемент5</li>
</ul>
Текст внутри <ul></ul> получилось найти через эту регулярку:
'#<ul>(.+?)</ul>#is'
А обернуть элементы списка можно так:
preg_replace('<br />', '</li><li>', 'Teкст');
Проблема в том, что не получается объеденить эти две конструкции, чтобы оборачивать элементы списка только лишь внутри <ul></ul>.
Ответы (1 шт):
Автор решения: Jigius
→ Ссылка
Вариант решения с использованием preg_replace_callback():
<?php
$i = <<< EOT
<ul>
элемент1<br />
элемент2<br />
элемент3<br />
элемент4<br />
элемент5
</ul>
<ul>
элемент11<br />
элемент12<br />
элемент13<br />
элемент14<br />
элемент15
</ul>
EOT;
echo
preg_replace_callback(
"~<ul>(.+?)</ul>~ims",
function ($m) {
return
"<ul>" .
implode(
"",
array_map(
function ($itm) {
return "<li>" . strip_tags($itm) . "</li>";
},
array_filter(
preg_split("~\r?\n~", $m[1])
)
)
) .
"</ul>";
},
$i
);
?>