в тексте я хотел бы заменить ДИВ тег литий. Но не все просто точно определены. В этом случае те, у которых есть id, начинающийся с «tab — *», мне нужно что-то легко используя функции PHP из текста:
<div id="tab-141285" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</div>
<div id="tab-85429" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</div>
получить этот текст
<li id="tab-141285" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</li>
<li id="tab-85429" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</li>
Можете ли вы посоветовать мне?
Спасибо
Регулярные выражения не подходят для анализа HTML. Любое регулярное выражение, которое вы пытаетесь использовать, будет хрупким. Я предлагаю использовать Расширение DOM вместо этого.
Идея состоит в том, чтобы:
<div>
элементы, которые имеют id
атрибут, который начинается с "tab-"
с использованием XPath запрос //div[starts-with(@id, "tab-")]
<li>
элемент для каждого из них.<div>
атрибуты и дочерние узлы к новому <li>
элемент.<div>
с новым <li>
,Поскольку ваша строка не имеет корневого элемента, мы немного потанцуем до и после, чтобы поместить ее в один, а затем перестроить.
$html = <<<'HTML'
<div id="tab-141285" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</div>
<div id="tab-85429" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</div>
HTML;
$dom = new DOMDocument();
$dom->loadHTML("<div>$html</div>", LIBXML_HTML_NOIMPLIED);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//div[starts-with(@id, "tab-")]');
foreach ($nodes as $node) {
$li = $dom->createElement('li');
while ($node->attributes->length) {
$li->setAttributeNode($node->attributes->item(0));
}
while ($node->firstChild) {
$li->appendChild($node->firstChild);
}
$node->parentNode->replaceChild($li, $node);
}
$html = '';
foreach ($dom->documentElement->childNodes as $node) {
$html .= $dom->saveHTML($node);
}
echo $html;
<li id="tab-141285" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</li>
<li id="tab-85429" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</li>
используйте domdocument xml-компонент php, просто загрузите строку в объект domdocument и найдите элемент, затем получите его атрибут, проверьте его идентификатор и сравните, используя preg_replace, и удалите, если он соответствует вашему условию