在文中,我想替换 div 标记 li 。但不是每个人都确定定义明确。在这种情况下,那些具有开始的标签" 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>
你可以告诉我吗?
谢谢
答案 0 :(得分:1)
正则表达式不足以解析HTML。你试图使用的任何正则表达式都是脆弱的。我建议改为使用DOM extension。
这个想法是:
<div>
id
属性以"tab-"
开头的所有//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>
答案 1 :(得分:0)
使用php的domdocument xml组件只需在domdocument对象中加载字符串并搜索该元素然后获取其属性并检查其id并使用preg_replace进行比较并删除它是否符合您的条件