我想在每次'/<g>/'
后匹配下一个出现的'/</'g>/'
。
我正在尝试在 PHP preg_replace
中使用它来删除任何没有 id 的组标签<g>
。我无法选择每个结束组标签,因为我没有删除所有组标签。
例如:
<g id="someid">
<g>
<!--content-->
</g>
</g>
在上面的示例中,需要保留开始组标记,最后一个将关闭开始标记的</g>
也需要保留。中间的组标签(打开和关闭)需要去掉,但里面的内容不需要去。
最好使用DOM
解析器进行此删除:
$xml = '<g id="someID">
<g>
<path d="..." />
</g>
</g>';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadXML($xml); // loads your xml
$xpath = new DOMXPath($doc);
$nlist = $xpath->query("//g[not(@id)]"); // g tag without @id
$numnodes = $nlist->length;
for($i=0; $i < $numnodes; $i++) {
$node = $nlist->item($i);
$node->parentNode->removeChild($node);
}
$newXML = $doc->saveXML();
echo $newXML;
输出:
<g id="someID">
</g>
最好
使用 HTML 解析器而不是正则表达式来执行此类操作。您使用preg_replace有充分的理由吗?