Bu regex (grup 2) ek bir son cevap ile (grup 1) iç içe alıntı bloku ile eşleşir:
(\[quote=[^]]*](?:(?R)|.)*\[/quote])(.*)
Biraz demo:
$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);
üretir:
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
)
Biraz açıklama:
( # 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
Ancak, PHP tarafından desteklenen bu özyinelemeli regex yapıları kullanarak olanları baş dönmesi olabilir ... Ben John Kugelman gibi küçük bir çözümleyici için önerilen tercih ediyorum.