Ответ Jhongs идеален, он оставит вас с содержанием обоих *.
Однако, если вам нужны отдельные части, вы можете сделать небольшую настройку и добавить группы захвата следующим образом:
if (preg_match('%\[QUOTE=([^\]]*)\](.*)\[/QUOTE\]%', $subject, $matches))
{
...
}
* будет иметь значения $ match [1] и $ match [2].