¿Algo así?
Código PHP:
Ver original<?php
$str = '<p> </p> <div> </div>';
$str = preg_replace('/(<p> <\/p>)| /i', '$1', $str); echo $str;
Edito:
Estoy de acuerdo con pateke que no es nada correcto el uso de <p> </p>, sino usar lo que corresponde, semánticamente hablando.