<?php
$string='[div][li id="1"]text1[li]text2[/li]text3[/li][/div]';
$pattern=':(?P<block>\[((?P<tag>[^\s\]]+)[^\]]*)\]((?&block)|[^\]]+)\[/((?P=tag))\]):';
do{$string=preg_replace($pattern,'<$2>$4</$5>',$string,-1,$count);}while($count>0); echo $string;
// your code goes here
PD9waHAKJHN0cmluZz0nW2Rpdl1bbGkgaWQ9IjEiXXRleHQxW2xpXXRleHQyWy9saV10ZXh0M1svbGldWy9kaXZdJzsKJHBhdHRlcm49JzooP1A8YmxvY2s+XFsoKD9QPHRhZz5bXlxzXF1dKylbXlxdXSopXF0oKD8mYmxvY2spfFteXF1dKylcWy8oKD9QPXRhZykpXF0pOic7CmRveyRzdHJpbmc9cHJlZ19yZXBsYWNlKCRwYXR0ZXJuLCc8JDI+JDQ8LyQ1PicsJHN0cmluZywtMSwkY291bnQpO313aGlsZSgkY291bnQ+MCk7CmVjaG8gJHN0cmluZzsKCi8vIHlvdXIgY29kZSBnb2VzIGhlcmU=