Mine (borrowing RJK's testing code): $1 will be the last letter 
(non-underscore) before or at the target location; $2 will be the first letter 
at or after the target location, or the last letter if no such letter exists.

for (qw/ A_Z_K_ A_____ _____K /) {
  print "$_\n";
  for my $n (1 .. 6) {
    my $r = $n - 1;
    print "$n: ";
    print /^(?=.{0,$r}([^_]))?.{0,$r}.*?([^_])/
      ? "[$1] ($2)" : "no match";
    print "\n";
  }
}

Reply via email to