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).*\]\k'; #my $reg='(\w+)\s(\w+)\s(\w+).*?\[(.*?)\]$1'; my $reg='(\w+) (\w+) (\w+) \[([\w\W]+)\] (.*?)'; { # use re 'debug'; if($str =~ /$reg/is) { # %hash=%+; $hash{fname}=$1; $hash{mname}=$2; $hash{lname}=$3; $hash{date}=$4; # %hash=%+; } } print Dumper \%hash;