PCRE Unverständnis

hallo, ich mal wieder

ich scheine bei PCRE irgendetwas grundliegendes nicht zu verstehen …
mein pattern sieht so aus:

der string dazu z.B. so:

und verarbeitet wird es mit preg_match

nun gibt er mir aber bei dem string nur die ‘2xy’ und “hallo” wider - würde ich das “hallo” weglassen gäbe er mir stattdessen das 'test’
setze ich den zweiten Teil ab dem Komma nochmal original hinten dran matcht er mir insgesamt drei
sollte das * nicht bewirken, dass er mir jenen zweiten Teil so oft wie möglich (vorhanden) zurückgibt?

also sähe mein Pattern so aus würde alles für den string passen:

was verstehe ich da falsch - wie bekomm ich es wie gewollt hin?
danke

/edit: oder geht * nur bei character classes? MUSS man hier mit preg_match_all arbeiten?