やったよ !私はそれを個人的な挑戦として取り、ついに正規表現でそれをやった!
このコードは最適化されていない可能性があります。改善方法を遠慮なく教えてください (ただし、DOM ではなく正規表現を使用します)。:)
$str = '<div>
<h3>Test</h3>
<img/>
<p>Lorem ipsum</p>
<p>dolor sit</p>
<p><-- pagebreak --></p>
<p>amet</p>
<blockquote>
<p>
lol
<p>
</blockquote>
</div>';
$pagebreak_str = '-- pagebreak --';
$weird_replacement = '§~@';
$parsed = array();
$is_below_break = false;
while (preg_match ("#<([^/]+)>#isU",$str)) {
if ($is_below_break) {
$str = preg_replace ("#<" .$pagebreak_str. ">#isU", "", $str);
$str = preg_replace ("#<[^/>]+>(.+)</[^/>]+>#isU", "", $str);
$str = preg_replace ("#<[^/>]+/>#isU", "", $str);
}
else {
$get = preg_replace ("#^(.*)<([^/>]+)>(.*)$#isU","$2",$str,1);
if ($get == $pagebreak_str)
$is_below_break = true;
if (!$is_below_break)
$str = preg_replace ("#<([^/>]+)>#isU","$weird_replacement$1>",$str,1);
if (preg_match ("#</([^/>]+)>(.+)(<$pagebreak_str>)#isU", $str))
$str = preg_replace ("#</([^/>]+)>#isU", "$weird_replacement/$1>", $str, 1);
}
}
$str = preg_replace ("#$weird_replacement#isU", "<", $str);
echo $str;
このコードは、クロス タグ (<div><a></div></a>) などの html コーディング ミスがないことを前提としていますが、適切なコーディング スタイルで動作していることは間違いありません。
それを試してみてください!