Hakkaten yav benim kafam durmuş yazarken sanırım
O zaman şu şekilde yapabiliriz:

$text = '<h3>başlık3</h3>öylesine yazı<b>bold yazı<u>alt çizgi<p>paragraf</str';
if(preg_match_all('/(<[^\>\/]*\>)?([^<\>]+)(<\/[^\>\/]*\>)?/smi',$text,$al)){
  $say = count($al[1]);  
  for($i=0;$i<$say;$i++){
    $yeni .= ($al[1][$i] != '' && substr($al[2][$i],0,1) != '/') ? $al[0][$i] : '';
    $son = ($al[3][$i] == '') ? str_replace('<','</',$al[1][$i]).$son : ''; 
  }
}  
echo $yeni.$son;