Добрый день!
Не знаю, на сколько для Вас принципиально вожно использовать регулярное выражение для преобразвния списка. Так можно сделать без него:
Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
<?PHP
$html = <<<EOD
<ul>
<li>Список11</li>
<li>
<ul>
<li>Список21 vvvvvvv
vggggggggggggg</li>
</ul>
</li>
</ul>
EOD;
echo "<pre>";
$obj=new SimpleXMLElement($html);
echo "<hr>";
$buf=[];
foreach ($obj->children()->li as $node)
{
if($node->children())
{
$tmp=[];
foreach ($node->children() as $node2)
{
$tmp[]=$node2->li->__toString();
}
$buf[]=$tmp;
}
else
{
$buf[]=$node->__toString();
}
}
/*
print_r($obj):
SimpleXMLElement Object
(
[li] => Array
(
[0] => Список11
[1] => SimpleXMLElement Object
(
[ul] => SimpleXMLElement Object
(
[li] => Список21 vvvvvvv
vggggggggggggg
)
)
)
)
//-------------------------------
print_r($buf):
Array
(
[0] => Список11
[1] => Array
(
[0] => Список21 vvvvvvv
vggggggggggggg
)
)
*/
?>