<?php
$page = " <p>
string
<b>
bold
</b>
<em>italic string</em>
also(bold)
</b>
</p>";
$res1 = preg_replace('~^(\s*<(?!/))([^<]+)>(?=[^<]+\n)((?:(?!</\2>)[\s\S])*?)(?=\n *<)(?![^>]*</\2>)~m', "$1$2>$3\n$1/$2>", $page); $res2 = preg_replace('~/[^>]+>$\n\K([^<>]*?)(^\s*)(?=</([^>]+)>)~m', "$2<$3>\n$1$2", $res1);
echo $res2;
PD9waHAKCSRwYWdlID0gIiA8cD4KICAgICBzdHJpbmcKICAgIDxiPgogICAgICBib2xkCiAgICA8L2I+CiAgICAgICAgPGVtPml0YWxpYyBzdHJpbmc8L2VtPgogICAgICBhbHNvKGJvbGQpCiAgICA8L2I+CiA8L3A+IjsKCiRyZXMxID0gcHJlZ19yZXBsYWNlKCd+Xihccyo8KD8hLykpKFtePF0rKT4oPz1bXjxdK1xuKSgoPzooPyE8L1wyPilbXHNcU10pKj8pKD89XG4gKjwpKD8hW14+XSo8L1wyPil+bScsICIkMSQyPiQzXG4kMS8kMj4iLCAkcGFnZSk7CiRyZXMyID0gcHJlZ19yZXBsYWNlKCd+L1tePl0rPiRcblxLKFtePD5dKj8pKF5ccyopKD89PC8oW14+XSspPil+bScsICIkMjwkMz5cbiQxJDIiLCAkcmVzMSk7CgplY2hvICRyZXMyOwo=