No tuve tiempo de probarlo, se me ocurrió que podría ser así la expresión regular:
Código PHP:
$matches = array();
preg_match_all('|(<([A-Z_]*):[0-9]*>([^<]*))*<EOR>|Umsi',$texto,$matches,PREG_SET_ORDER);
Luego en $matches[0] te quedaria un array con todo lo que ubicó para el primer registro, puedes hacer un print_r($matches[0]) para ver que encuentra.