我想抓住体内的所有内容。
<html>
<head><title>Test</title>
</head>
<body>
<div id="dummy">Your contents</div>
<p class="p">Paragraph</p>
<div id="example">My Content</div>
</body>
</html>
以及我想要的最终结果:
<div id="dummy"></div>
<p class="p"></p>
<div id="example"></div>
不喜欢这样:
<div id="dummy">Your contents</div>
<p class="p">Paragraph</p>
<div id="example">My Content</div>
答案 0 :(得分:2)
虽然这样可行:
if (preg_match('%<(body)[^>]*>(.*)<\s*/\1\s*>%s', $subject, $regs)) {
$result = $regs[2];
}
我不推荐它。使用php,你有更好的工具来完成这项工作。例如,使用this解析器:
# create and load the HTML
include('simple_html_dom.php');
$html = new simple_html_dom();
$html->load("<html>
<head><title>Test</title></head>
<body>
<div id="dummy">Your contents</div>
<p class="p">Paragraph</p>
<div id="example">My Content</div>
</body>
</html>");
# get an element representing the body
$element = $html->find("body");
修改强>
既然你坚持......
$result = preg_replace('%(<(div)[^>]*>).*<\s*/\2\s*>%', '\1</\2>', $subject);
这将删除div标签的内容。您也可以将div标签与其他标签交换。虽然我真的不知道你在哪里,我不推荐它。
答案 1 :(得分:2)
$content = '<html>
<head><title>Test</title>
</head>
<body>
<div id="dummy">Your contents</div>
<p class="p">Paragraph</p>
<div id="example">My Content</div>
</body>
</html>';
preg_match('/(?:<body[^>]*>)(.*)<\/body>/isU', $content, $matches);
$bodycontent = $matches[1];
echo htmlspecialchars($bodycontent);
preg_match_all('/<[^>]*>/isU', $bodycontent, $matches2);
$tags = implode("",$matches2[0]);
echo htmlspecialchars($tags);