-2

まず、Simple HTML DomパーサーとPHPの組み込みソリューションについて知っていますが、これらのいずれも、私が求めている種類の仕事を正確に実行していません(私の知る限りではありません)。

DOM内の要素とそれに属するコンテンツを見つけて削除し、マークアップに余分な空白が含まれている場合は許すPHPのPCREを探しています。

コードは次のとおりです。

<div id="maindiv">
    <div class="unusefuldiv1">Unuseful content</div>
    <div id="unusefuldiv2">Unuseful content2</div>
    <!--  ... some content I'm after for -->
</div>

.uunusefuldiv1と#unusefuldiv2(コンテンツと一緒にマークアップ)の両方を削除し、(可能であれば)たとえば<div class="unusefuldiv1">、余分な空のスペースでわずかにタイプミスした場合に仕事をするのに十分な柔軟性を備えた正規表現パターンに必死です<div class="unusefuldiv1" >

それは似たようなものかもしれません

preg_replace('/<div\b[^>]*>(.*?)<\/div>/is', '', $dom_content);

ただし、このパターンでは、一部のクラス、IDの有無にかかわらず、すべてのdivが削除されます。

誰かが解決策を持っていますか?

4

2 に答える 2

2

ここでは、deidcatedDOMパーサーを使用しない理由はありません。

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

$xpath = new DOMXPath($dom);

$id = 'unusefuldiv2';
$classname = 'unusefuldiv1';
$query = "//div[@id='$id']|//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]";
foreach ($xpath->query($query) as $node) {    
    $node->parentNode->removeChild($node);
}

echo $dom->saveHTML();

デモ:http ://eval.in/11108

于 2013-02-23T16:47:47.567 に答える
1
$dom_content = preg_replace( 
    '/\s*<div [^<>]*unuseful[^<>]+>.*?<\/div\s*>\s*/is', '', $dom_content );

開始タグにunusefulという単語が含まれているdiv(および周囲の空白)を削除します。

より良い正規表現ソリューションを得るには、divを削除するための基準をより適切に説明する必要があります。

于 2013-02-23T17:02:49.040 に答える