В этом вопросе, если вы говорите о том факте, что код, который вы использовали, обернул бы несколько наборов тегов li в один тег ul, даже если предполагалось, что там будет разрыв, например:
* line 1
* line 1
* line 1
this is not part of a list
* line 1
* line 1
* line 1
станет:
<ul>
<li>line 1</li>
<li>line 1</li>
<li>line 1</li>
this is not part a the list
<li>line 1</li>
<li>line 1</li>
</ul>
Тогда у меня есть решение для вас. У вас там было 90%, вот решение, которое я придумал (но я уверен, что вы все равно уже решили его):
$text = preg_replace("/\*+(.*)?/i","<ul><li>$1</li></ul>",$text);
$text = preg_replace("/(\<\/ul\>\n(.*)\<ul\>*)+/","",$text);
Решение не связывается со списками любого типа, уже находящимися на странице в тексте или чем-либо еще, и обеспечивает разделение нескольких списков. Причина в том, что при каждом совпадении, которое он находит, где звездочка использовалась для создания элемента текстового списка, он окружает его символами ul и li, а вторая строка находит все закрывающие и открывающие теги ul спина к спине и удаляет их.