我有这个:
$text = 'text text text s html tagove
<div id="content">ss adsda sdsa </div>
oshte text s html tagove';
$content = preg_replace('/(<div\sid=\"content\">)[^<]+(<\/div>)/i', '', $text);
var_dump($content);
但如果<div id="content"></div>
包含其他代码,例如<b>
,<i>
等,则无效。
例如:
$text = 'text text text s html tagove
<div id="content"><b> stfu </b> ss adsda sdsa </div>
oshte text s html tagove';
答案 0 :(得分:4)
您可以改为使用lazy quantifiers。
$s="foo<div>Some content is <b>bold</b>.</div>bar\n";
print preg_replace("/<div>.+?<\/div>/i", "", $s);'
输出:
foobar
每条评论更新:
[ghoti@pc ~]$ cat doit.php
<?php
$text = 'text text text s html tagove
<div id="content"><b> stfu </b> ss adsda sdsa </div>
oshte text s html tagove';
print preg_replace('/<div id="content">.+?<\/div>/im', '', $text) . "\n";
[ghoti@pc ~]$ php doit.php
text text text s html tagove
oshte text s html tagove
[ghoti@pc ~]$
答案 1 :(得分:2)
最好使用DOM来处理HTML文本解析。这是一个基于DOM的代码,用于删除div标签:
$html = <<< EOF
text text text s html tagove
<div id="content">ss <div>abcd</div>adsda sdsa </div>
oshte text s html tagove
<div id="content">foo <div>bar</div>baz foo</div>
some more text here
EOF;
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$nlist = $xpath->query("//div[@id='content']");
for($i=0; $i < $nlist->length; $i++) {
$node = $nlist->item($i);
$node->parentNode->removeChild($node);
}
$newHTML = $doc->saveHTML();
echo $newHTML;
感谢@Qtax指出我原来的问题在我写完之前基于正则表达式的答案后发生了变化。
<强>输出:强>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<p>text text text s html tagove
</p>
oshte text s html tagove
some more text here</body></html>