匹配下一个正则表达式模式


match next regex pattern after another pattern

我想在每次'/<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有充分的理由吗?