@inputs = ( "name: mike jones location: ny", 'name: "mike jones" location: ny', "name: jones location: ny" );; $re = qr[ (?: (\S+): \s* ) ["']? (.+?) ["']? (?=\s+\S+:|$) ]x;; %h = m[$re]g and pp $_, \%h for @inputs;; ("name: mike jones location: ny", { location => "ny", name => "mike jones" }) ("name: \"mike jones\" location: ny", { location => "ny", name => "mike jones" }) ("name: jones location: ny", { location => "ny", name => "jones" })