--- Ronald J Kimball <[EMAIL PROTECTED]> wrote:
> On Wed, Jun 27, 2007 at 05:45:54AM -0700, Phil Carmody wrote:
> > Say I had a string satisfying /^[A-Z_]{6}$/, but not equal to '______'
> > and I wish to extract from that the 1 or 2 letters which are closest to
> > the n-th character in the string. Is there a simple regexp to perform
> > that task?
>
> Well, I wouldn't exactly call this regex simple... But I have come up with
> one that does it:
...
> /^(?(?=.{0,$r}[A-Z]).{0,$r}|.*)([A-Z])(?(?<!^..{$r}).*?([A-Z]|$))/
> /^.{$r}([A-Z])/ || /^.{0,$r}([A-Z]).*?([A-Z]|$)/ || /^.*([A-Z])/
> /^.{$r}([A-Z])|^.{0,$r}([A-Z]).*?([A-Z]|$)|^.*([A-Z])/
Woh! I'm glad that's complicated, as I don't feel so bad just doing it the
naive way. (I chose the loop, rather than the joining of the result from two
substrs, one using a /^ match and the other using a $/.)
I have another idea how to solve the problem of isolating the (1 or) 2 closest
real letters:
In the A_Z_K_ case, for n=2 (r=1), an equally useful output could be
A_Z___
That is, to replace anything beyond the first letter at or after char r with
the underscore. Two passes would be necessary, one to strip that which is
before, one to strip that which is after.
Of course, I can probably simplify things by handling the cases of when there
is and is not a letter at the point of interest separately. If there is a
letter there, the answer is already found.
It's not a big deal, I was just noodling...
Thanks for the rather heroic regexps though!
Phil
() ASCII ribbon campaign () Hopeless ribbon campaign
/\ against HTML mail /\ against gratuitous bloodshed
[stolen with permission from Daniel B. Cristofani]
____________________________________________________________________________________
Be a better Globetrotter. Get better travel answers from someone who knows.
Yahoo! Answers - Check it out.
http://answers.yahoo.com/dir/?link=list&sid=396545469