我想从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
。