my @tests = ( '"abcd\\\\efgh"', '"abcd\\""', '"abcd\\"efgh"', '"abcd\\\\\\"efgh"', '"abcd\\\\i\\"efgh"', '"abcd\\\\"', ); foreach my $test (@tests) { print "Try for \"$test\":\n"; if ($test =~ /^"((?:[^"\\]|\\["\\])+)"$/) { print "It matches!\n"; print '$1: ' . $1 . "\n"; print '$2: ' . (defined($2) ? "\$2 is defined\n" : "\$2 is NOT defined\n"); } else { print "It does not match!\n"; } print "\n"; } #### Try for ""abcd\\efgh"": It matches! $1: abcd\\efgh $2: $2 is NOT defined Try for ""abcd\""": It matches! $1: abcd\" $2: $2 is NOT defined Try for ""abcd\"efgh"": It matches! $1: abcd\"efgh $2: $2 is NOT defined Try for ""abcd\\\"efgh"": It matches! $1: abcd\\\"efgh $2: $2 is NOT defined Try for ""abcd\\i\"efgh"": It matches! $1: abcd\\i\"efgh $2: $2 is NOT defined Try for ""abcd\\"": It matches! $1: abcd\\ $2: $2 is NOT defined