$re = '/(?<verse>(?<block>^(?<num>\d+):\d+\s(?<txt>(?s).*?)(?<end>\n{2})(?!(?P=num)))+?)/m';
$str = '1:10 foo bar
baz
1:11 foo bar
baz
2:20 foo bar
baz
2:21 foo bar
baz
2:22 foo bar
baz
3:30 foo bar
baz
3:21 foo bar
baz
';
$subst = "\n${verse}<br>\n\n";
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php