Re: regexp quickie
Ronald J Kimball <[email protected]> Wed, 27 Jun 2007 15:38:21 -0400
| Newsgroups | gmane.comp.lang.perl.golf |
|---|---|
| Message-ID | <[email protected]> |
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