c:\@Work\Perl>perl -wMstrict -MData::Dump -le "my $str = 'QB Carson Palmer RB Chris Ivory RB Eddie Lacy WR A. J. Green ' . 'WR John Brown WR WR Grace WR Pele TE Billy Bob Bennett ' . 'FLEX A.P. Hill DST Panthers'; print qq{[[$str]]}; ;; my $result = {}; ;; my $position = qr{ \b (?: QB | RB | WR | TE | FLEX | DST) \b }xms; my $player = qr{ \S+ (?: \s+ \S+)*? }xms; ;; while ($str =~ m{ ($position) \s+ ($player) (?= \s+ $position | \z) }xmsg) { ;; my ($posn, $name) = ($1, $2); ;; push @{$result->{$posn}}, $name; ;; } ;; dd $result; " [[QB Carson Palmer RB Chris Ivory RB Eddie Lacy WR A. J. Green WR John Brown WR WR Grace WR Pele TE Billy Bob Bennett FLEX A.P. Hill DST Panthers]] { DST => ["Panthers"], FLEX => ["A.P. Hill"], QB => ["Carson Palmer"], RB => ["Chris Ivory", "Eddie Lacy"], TE => ["Billy Bob Bennett"], WR => ["A. J. Green", "John Brown", "WR Grace", "Pele"], }