-2

comment単語またはshare(:<div id="comment">、、、、<div class="header-comment">など)<div id="comment-footer">を含むidまたはclassのdivを削除したい<div class="social-share">

preg_replace('/<div[^>]*(comment|share)[^>]*>(.*?)<\/div>/is', '', $htmls);

うまくいかない。正しい正規表現を行う方法は?ここにいくつかのテストコードがあります、私は一部を削除commentして保持contentしたいと思いますfooter

$htmls = <<<EOT
<div id="content">
     Main content.
</div>
<div id="comment">
    <ul>
        <li class="comment">
            <div class="header-comment">
                Comment:
                <span class="date-comment">8/11/2012, 21:25</span>
            </div>
            <h4>Some Text</h4>
            <p class="test-comment">Blah~~ Blah~~ Blah~~</p>
            <div class="share">
                <div class="vote">
                    <a class="vota yes" title="Like">2</a>
                    <a class="vota no" title="Unlike">0</a>
                </div>
            </div>
        </li>
        <li class="comment">
            <div class="header-comment">
                Comment:
                <span class="date-comment">8/11/2012, 23:08</span>
            </div>
            <h4>Other Text</h4>
            <p class="test-comment">Blah~~ Blah~~ Blah~~</p>
            <div class="share">
                <div class="vote">
                    <a class="vota yes" title="Like">4</a>
                    <a class="vota no" title="Unlike">0</a>
                </div>
            </div>
        </li>     
     </ul>
</div>
<div id="footer">
     Footer content.
</div>
EOT;

$htmls = preg_replace('/<div[^>]*(comment|share)[^>]*>(.*?)<\/div>/is', '', $htmls);
echo $htmls;
4

4 に答える 4

2

DOMDocument関数を使用してHTMLを解析し、不要なものをターゲットにしdiv削除することを検討してください。これにより、より速く、理解しやすく、保守しやすくなり、場合によっては書き込みも速くなります。

于 2012-11-09T12:28:43.717 に答える
1

私があなたが使うべきだと思うのは DomDocument試してみることです:

$dom = new DOMDocument();
$dom->loadHTML($htmls);
$remove = array("comment","share");
$removeList = array();
foreach ( $dom->getElementsByTagName("div") as $div ) {
    if (in_array($div->getAttribute("class"), $remove) || in_array($div->getAttribute("id"), $remove)) {
        $removeList[] = $div;
    }
}

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

$dom->formatOutput = true;
echo "<pre>";
echo htmlentities($dom->saveHTML());
于 2012-11-09T12:31:21.213 に答える
0

正しい正規表現を行う方法は?

これを行うには、最初にすべてのDIVを識別し、それらのテキストを抽出してから、そのテキストを調べて、。を使用して正規表現パターンを探しますpreg_match

ただし、正規表現を使用してパーツを節約し、 xpathを使用することもできます。あなたの場合、それはもっと簡単です。

于 2012-11-09T12:15:56.827 に答える
0

このサイトを参照して、正規表現をテストしてください http://www.regexplanet.com/advanced/java/index.html

于 2012-11-09T12:25:09.390 に答える