ich muss zugeben, ich war jetzt auch ganz schön stuzig, warum das nicht klappt. Nach ein bisschen ausprobieren bin ich aber auf die Lösung gekommen: Der reguläre Ausdruck ist nicht der für das Element, das du haben willst, sondern definiert das Trennzeichen. Heißt: Du hast durch deinen regex-Code jedes Element zu einem Trennzeichen gemacht und er liefert dir daher die leeren Arrayelemente zwischen ...><... zurück.
Entweder du findest nen Code, der <, >< und > als Trennzeichen ansieht, oder du machst das halt doch einfach über explode. Ist leistungstechnisch sowieso sinnvoller, nen fertigen Code kann ich dir leider für beides nicht anbieten. Falls dus auf jeden Fall über nen Regulären Ausdruck machen möchtest, sei dir der RegExr ans Herz gelegt - ein wirklich geniales Tool zum Testen von Regulären Ausdrücken mit vielen Beispielen.