<?php
$prevhtml = '
<div class="foo">
<div>FOO</div>
<div class="bar">
<div>BAR</div>
</div>
<div>FOOBAR<div class="foobar"></div></div>
<div class="bar"><div><b>BAR</b></div></div>
<!-- para este caso, deberás ejecutar preg_replace
hasta que no haya nada nuevo por reemplazar -->
<div><div>foobar</div></div>
</div>
' ;
$newhtml = '' ;
while ( $newhtml != $prevhtml ) {
if ( ! empty ( $newhtml ) ) $prevhtml = $newhtml ; '/<div>((?:<div[^>]*>(?1)<\/div>|[^<]*|<(?!div))*)<\/div>/smi'
, '<p>$1</p>'
, $prevhtml ) ;
}
print $newhtml ;
PD9waHAKCiRwcmV2aHRtbCA9ICcKPGRpdiBjbGFzcz0iZm9vIj4KPGRpdj5GT088L2Rpdj4KCiAgPGRpdiBjbGFzcz0iYmFyIj4KICAgICA8ZGl2PkJBUjwvZGl2PgogIDwvZGl2PgoKICA8ZGl2PkZPT0JBUjxkaXYgY2xhc3M9ImZvb2JhciI+PC9kaXY+PC9kaXY+CgogIDxkaXYgY2xhc3M9ImJhciI+PGRpdj48Yj5CQVI8L2I+PC9kaXY+PC9kaXY+CgogIDwhLS0gcGFyYSBlc3RlIGNhc28sIGRlYmVyw6FzIGVqZWN1dGFyIHByZWdfcmVwbGFjZSAKICAgICAgIGhhc3RhIHF1ZSBubyBoYXlhIG5hZGEgbnVldm8gcG9yIHJlZW1wbGF6YXIgLS0+CiAgPGRpdj48ZGl2PmZvb2JhcjwvZGl2PjwvZGl2Pgo8L2Rpdj4KCic7CgokbmV3aHRtbCA9ICcnOwp3aGlsZSgkbmV3aHRtbCAhPSAkcHJldmh0bWwpIHsKICAgIGlmICghZW1wdHkoJG5ld2h0bWwpKSAkcHJldmh0bWwgPSAkbmV3aHRtbDsKICAgICRuZXdodG1sID0gcHJlZ19yZXBsYWNlKAogICAgICAgICAnLzxkaXY+KCg/OjxkaXZbXj5dKj4oPzEpPFwvZGl2PnxbXjxdKnw8KD8hZGl2KSkqKTxcL2Rpdj4vc21pJwogICAgICAgICwnPHA+JDE8L3A+JwogICAgICAgICwkcHJldmh0bWwpOwp9CgpwcmludCAkbmV3aHRtbDsK