我想在每'/</\g>/'
之后匹配'/<g>/'
的下一次出现。
我尝试在PHP preg_replace
中使用此功能删除任何没有ID的组标记<g>
。我无法选择每个结束组标记,因为我没有删除所有组标记。
例如:
<g id="someid">
<g>
<!--content-->
</g>
</g>
在上面的示例中,需要保留开放组标记,关闭开始标记的最后一个</g>
也是如此。中间的组标签(打开和关闭)需要去,但不是内部的内容。
答案 0 :(得分:2)
最好使用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>
答案 1 :(得分:0)
最好使用HTML解析器而不是正则表达式来执行此类操作。您是否有充分理由使用preg_replace?