use strict; use warnings; my $string = 'word_one word_one word_two 2000 word_three 3000'; while ( $string =~ m/(?\w+)\s+(?\w+)/g ) { my %groupNames; push @{ $groupNames{ $+{$_} } }, $_ for keys %+; print "Match : $1 GroupName(s): @{ $groupNames{$1} }\n"; }