<?php
$sentence = '[html style="font-size: 18px;" dir="ltr"][div style="font-size: 18px;" dir="ltr"][p style="font-weight: bold;"]Hello,[/p][p]You have got a new message from [a href="https://www.example.com/"]Example.com[/a][br][br].You could check your message on [a href="https://www.example.com/en/manager/inbox.html"]Manager[/a][/p][p][img src="https://www.example.com/assets/images/logo-default-120x50.png" width="120px" height="80px"][div style="color: #D4192D; font-weight: bold;"]Example.com Team[/div][/p][/div][/html]';
// proceed to the replacement of all self-closing tags first
$result = preg_replace('~\[ (br|hr|img)\b ([^]]*) ]~xi', '<$1$2/>', $sentence);
// then replace the innermost tags until there's nothing to replace
$count = 0;
do {
$result = preg_replace('~
\[ ( (\w+) [^]]* ) ] # opening tag
( [^[]*+ ) # content without other bracketed tags
\[/ \2 ] # closing tag
~xi', '<$1>$3</$2>', $result, -1, $count);
} while ($count);
echo $result;
<html style="font-size: 18px;" dir="ltr"><div style="font-size: 18px;" dir="ltr"><p style="font-weight: bold;">Hello,</p><p>You have got a new message from <a href="https://www.example.com/">Example.com</a><br/><br/>.You could check your message on <a href="https://www.example.com/en/manager/inbox.html">Manager</a></p><p><img src="https://www.example.com/assets/images/logo-default-120x50.png" width="120px" height="80px"/><div style="color: #D4192D; font-weight: bold;">Example.com Team</div></p></div></html>