use strict; use Data::Dumper; my %hash=(); my $str="Test Tester Testing [Feb 18: 28_10_10] Test"; #my $reg='(?\w+\b)\s(?\w+)\s(?\w+\s).*\[(?[^\]]+)/'; my $reg='^(?\S+)\s+(?\S+)\s+(?\S+)\s+\[(?[^\]]*)\]\+s+\k\z'; { if($str =~ /$reg/) { %hash=%+; } } print Dumper \%hash;