On Wed, Jun 27, 2007 at 02:26:35PM -0500, [EMAIL PROTECTED] wrote: > 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"; > } > }
I wish I'd thought of doing it that way! If you want $2 to only ever be the first letter at or after the target location, you can just tweak the second half of the regex: /^(?=.{0,$r}([^_]))?(?:.{$r}.*?([^_]))?/ Ronald