Это регулярное выражение сопоставляет блок вложенных цитат (в группе 1) с дополнительным последним ответом (в группе 2):
(\[quote=[^]]*](?:(?R)|.)*\[/quote])(.*)
Немного демо:
$text = '[quote=Username2 here][quote=Username here]quoted text[/quote]Reply text[/quote]More text';
preg_match('#(\[quote=[^]]*](?:(?R)|.)*\[/quote])(.*)#is', $text, $match);
print_r($match);
производит:
Array
(
[0] => [quote=Username2 here][quote=Username here]quoted text[/quote]Reply text[/quote]More text
[1] => [quote=Username2 here][quote=Username here]quoted text[/quote]Reply text[/quote]
[2] => More text
)
Небольшое объяснение:
( # open group 1
\[quote=[^]]*] # match '[quote= ... ]'
(?:(?R)|.)* # recursively match the entire pattern or any character and repeat it zero or more times
\[/quote] # match '[/quote]'
) # open group 1
( # open group 2
.* # match zero or more trailing chars after thae last '[/quote]'
) # close group 2
Но использование этих рекурсивных конструкций регулярных выражений, поддерживаемых PHP, может сделать головокружение ... Я бы выбрал небольшой анализатор, как предложил Джон Кугельман.