Bulleted list from dashes
Wouldn't this give you the desired output:

$result = '&lt;ul&gt;' . preg_replace('/^- (.*)$/m', '&lt;li&gt;$1&lt;/li&gt;', $subject) . '&lt;/ul&gt;';


Update:

$output = preg_replace_callback(
    "((^- (.*)$\r*\n*)+)m",
    function($m) {
        return '&lt;ul&gt;' . preg_replace('/^- (.*)$/m', '&lt;li&gt;$1&lt;/li&gt;', $m) . '&lt;/ul&gt;';
    },
    $input
);