regex:查找所有未注释的标记


regex: find all uncommented tags

我想从html或xml文件中提取所有未注释掉的节点。下面的正则表达式是我常用的方法。

我的RegEx

/<span.*?>(['s'S]*?)<'/span>/gi

这里是示例xml

<div>
<p>
    <span style="font-size: 20px;">Hello</span>
    <span style="font-size: 20px;">World</span>
</p>
<p>
    <!--
    <span>Hello</span> 
    <span>World</span>
    -->
</p>
<p>
    <span>Hello</span>
    <span>World</span>
</p>
<!--
<p>
    <span>Hello</span> 
    <span>World</span>
</p>
-->

我很感激你的帮助。

致以最良好的问候,Michael

好吧,您可以使用一个像样的解析器(在本例中为DomDocument)删除注释,然后分析其余部分。考虑以下代码(注意Hello World字符串中更改的数字,以明确删除的内容):

<?php
$html = '<div>
<p>
    <span style="font-size: 20px;">Hello</span>
    <span style="font-size: 20px;">World</span>
</p>
<p>
    <!--
    <span>Hello2</span> 
    <span>World2</span>
    -->
</p>
<p>
    <span>Hello3</span>
    <span>World3</span>
</p>
<!--
<p>
    <span>Hello4</span> 
    <span>World4</span>
</p>
-->
</div>
';
$dom = new DOMDocument;
$dom->loadHtml($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//comment()') as $comment)
    $comment->parentNode->removeChild($comment);
$body = $xpath->query('//body')->item(0);
echo $dom->saveXml($body);
# yields hello world and hello world3
?>

现在,您的评论标签已被删除。显然,您可以更精确地摆弄xpath