これは正規表現で行うことができます。この状況では、DOM は最も簡単な方法ではないと思います。PHP の例:
$pattern = '~(?><(p|span|div)\b[^>]*+>(?>\s++| )*</\1>|<br/?+>| |\s++)+$~i';
$result = preg_replace($pattern, '', $text);
説明:
~
(?> # open an atomic group
<(p|span|div)\b[^>]*+> # opening tags, note that this subpattern allows
# attributes with [^>]*+ you can remove it if you
# don't need it
(?>\s++| )* # content allowed inside the tags *
</\1> # closing tag (refer to the first capturing group)
| # OR
<br/?+> # stand alone tag <br>
| # OR
#
| # OR
\s++ # white characters
)+$
~i
(*) このパターンは、次のようなネストされたタグを処理しないことに注意してください。<div><p></p><\div>
ただし、再帰パターンで問題を解決することは可能です。
$pattern = '~(<(p|span|div)\b[^>]*+>(?1)*</\2>|<br/?+>| |\s++)+$~i';
ここで(?1)
は、最初のキャプチャ グループを参照します。