2016-04-06 5 views
0

コメントアウトされていない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> 
--> 

私は助けをいただければ幸いです。

よろしく、 マイケル

+2

これに対して正規表現は間違ったツールです。実際のXMLパーサまたはHTMLパーサを使用します。 – kjhughes

+0

最初にコメントを削除してから、アプローチを使用してください。 –

+0

正規表現でHTMLを決して解析しないでください。代わりに[PHP DOMパーサ](http://simplehtmldom.sourceforge.net/)を使用してください。 –

答えて

0

さて、あなたはまともなパーサ(この場合は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を使ってもっと正確にすることができます。

+0

ありがとう、私すべてのコメントとタグを抽出し、2番目の正規表現ですべてのコメントを除外します。 /(<! - [\ s \ S] *? - > | )/ gi –

関連する問題