use Data::Dumper; my $string = '"I think" this fits "the \\"requirements presented\\" then" again \\"I could "be wrong"'; print Dumper [split /\s+(?=(?:(?:(?:[^"\\]|\\")*"){2})*(?:\\"|[^"])*$)/, $string]; #### "I think" this fits 1 1 again \"I could "be wrong" #### I think this 1 1 requirements presented\ then again \ I could be wrong #### split /\s+(?=(?:(?:[^"]*"){2})*[^"]*$)/,$string