Mar*_*ski 0 html php html-parsing
好吧,因为它是WordPress问题而且遗憾的是,我需要删除父div及其内部的每个表示:
<div class="sometestclass">
<img ....>
<div>.....</div>
any other html tags
</div><!-- END: .sometestclass -->
Run Code Online (Sandbox Code Playgroud)
我唯一的想法是匹配以下开头的所有内容:
<div class="sometestclass">
Run Code Online (Sandbox Code Playgroud)
并结束于:
<!-- END: .sometestclass -->
Run Code Online (Sandbox Code Playgroud)
所有这一切之间(我可以标记我想要的父div的结尾,这只是一个样本).任何人都知道如何做到这一点:
<?php $content = preg_replace('?????','',$content); ?>
Run Code Online (Sandbox Code Playgroud)
我不会使用正则表达式.相反,我会使用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() );
Run Code Online (Sandbox Code Playgroud)
结果如下:
<p>Hello World</p>
Run Code Online (Sandbox Code Playgroud)
<?php $content = preg_replace('/<div class="sometestclass">.*?<\/div><!-- END: .sometestclass -->/s','',$content); ?>
Run Code Online (Sandbox Code Playgroud)
我的RegEx有点生疏,但我认为这应该有效.请注意,正如其他人所说,RegEx没有适当的装备来处理HTML的一些复杂性.
此外,此模式不会div在类中找到嵌入的元素sometestclass.你需要递归.