0

OK、それは WordPress の問題であり、悲しいことにもう少し深くなるので、親 div とその内部の各表現を削除する必要があります。

<div class="sometestclass">
   <img ....>
   <div>.....</div>
   any other html tags
</div><!-- END: .sometestclass -->

私が持っている唯一のアイデアは、次で始まるすべてのものを一致させることです:

<div class="sometestclass">

そして次で終わります:

<!-- END: .sometestclass -->

間にあるすべてのもの(親divの最後にタグを付けることができます。これは単なるサンプルです)。誰でもそれを行う方法を知っています:

<?php $content = preg_replace('?????','',$content); ?>
4

4 に答える 4

9

正規表現は使いません。代わりに、DOMDocumentクラスを使用します。そのクラスを持つすべての要素を見つけてdiv、それらの親から削除します。

$html = "<p>Hello World</p>
         <div class='sometestclass'>
           <img src='foo.png'/>
           <div>Bar</div>
         </div>";

$dom = new DOMDocument;
$dom->loadHTML( $html );

$xpath = new DOMXPath( $dom );
$pDivs = $xpath->query(".//div[@class='sometestclass']");

foreach ( $pDivs as $div ) {
  $div->parentNode->removeChild( $div );
}

echo preg_replace( "/.*<body>(.*)<\/body>.*/s", "$1", $dom->saveHTML() );

結果は次のとおりです。

<p>Hello World</p>
于 2012-05-18T19:42:16.873 に答える
6
<?php $content = preg_replace('/<div class="sometestclass">.*?<\/div><!-- END: .sometestclass -->/s','',$content); ?>

私の正規表現は少し錆びていますが、これでうまくいくと思います。他の人が言っているように、正規表現はHTMLの複雑さのいくつかを処理するために適切に装備されていないことに注意してください。

さらに、このパターンdivでは、クラスに埋め込まれた要素は見つかりませんsometestclass。そのためには再帰が必要です。

于 2012-05-18T20:33:05.763 に答える
0

いくつかの CSS は.sometestclass{display: none;}どうですか?

于 2012-05-18T19:44:42.583 に答える