2009-07-11 12 views
6

RegExを使用してhtml要素とコンテンツを削除するにはどうすればよいですか

<div id="ithis" class="cthis">Content here which includes other elements etc..) </div> 

どのように私はこのdivとその中のすべてをPHPと正規表現を使用して削除することができますか?

ありがとうございました。

+0

さらに詳しく説明できますか?これは文字列の形ですか? –

+1

あなたはIDの名前やクラス名を知っていますか?または、その記述に該当するすべてのdivを削除しないように、IDおよび/またはクラスの識別名がありますか?またはすべての部門とそのコンテンツを削除しますか? –

答えて

13

簡単な答えはあなたがしていないということです。代わりに、PHPの多くのHTMLパーサの1つを使用します。正規表現は、HTMLを操作するばらばらで誤りがちな方法です。

あなたがこれを行うことができます言われていること:

$html = preg_replace('!<div\s+id="ithis"\s+class="cthis">.*?</div>!is', '', $html); 

しかし多くのの事これで間違っていることができます。

<div id="ithis" class="cthis">Content here which <div>includes</div> other elements etc..) </div> 

あなたがになってしまいます:最初</div>で停止する正規表現として

other elements etc..) </div> 

例えば、それは、div要素が含まれている場合。そして、(正規表現で)この問題を一貫して解決するために本当にできることは何もありません。

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$element = $doc->getElementById('ithis'); 
$element->parentNode->removeChild($element); 
$html = $doc->saveHTML(); 
+0

+1。 (A)要素が存在しない場合、 '$ element'は' NULL'であり、 ' - > removeChild()'コマンドは致命的なエラーで失敗し、(B)あなたが望むこともできます'@ 'を使用して' - > loadHTML() 'が不正な形式のHTMLに関する通知を黙らせます:' @ $ doc-> loadHTML($ html); ' –

1

私はPHPについては知らないが、あなたは何も/<id.*?<\/id[^>]*>/を置き換えることができます:それはもっとこのようになりますパーサを完了

0

PHPはサーバ側で、出力はサーバからのものです。あなたはそれを出力しないことができますか?またはそれを隠そうとしていますか?その場合、スタイルシートでは、単に#ithis {display:none}と言います。

文字列がPHPで書かれていない関数からの戻り値であり、そのコードを嫌うのではない場合、ネストされたdivのさまざまな構文については非常に難しい正規表現を記述する必要があります。出力など、私はあなたを助けるためにいくつかのパーサー(おそらくこのZend Framework component)を使用することをお勧めしたいと思います。私は何度か同じようなことをしてきました。 ZFに慣れていない場合は、他のものを試してみてください。

関連する問題