in reply to Re^2: Zero-width look-ahead regexp question
in thread Zero-width look-ahead regexp question

The word boundary does not help, because for instance 'FOOBAR X' and 'FOOBARX' are both strings which should be accepted (because both BAR X and BARX are considered different from <BAR>), while 'FOOBAR' should be rejected.

Actually I meanwhile believe to having found a solution to my problem while having lunch (it is surprising how a glass of Italian Chardonnay can do good to the brain cells):

$name =~ /^FOO(?!(BAR|BAZ)$)/
so unless someone can find a flaw with this (the examples where I tried it, worked so far), I think I will stick with it. It is not a beautiful solution, though, because if I would like one day to pick up what is to the right of FOO, I can't do it. So I'm still interested in hearing alternative proposals.

Maybe just to make it clear, here are concrete examples: The following strings should be accepted:

FOOABC FOO_BAR FOOBA FOOBAZZZZ FOOBAR BAZ
while the following should be rejected:
FOOBAR FOOBAZ BARBAZ
-- 
Ronald Fischer <ynnor@mm.st>

Replies are listed 'Best First'.
Re^4: Zero-width look-ahead regexp question
by ww (Archbishop) on Jul 02, 2008 at 03:25 UTC
    "it is surprising how a glass of Italian Chardonnay can do good to the brain cells"

    But it is far from surprising that providing a clear specification of what you seek will enhance the liklihood that the Monks will provide useful advice.

    I mention this because your original post. The first bit of code, [/^(BAR|BAZ)$/, requires that /BA[RZ]/ NOT be the last element of your string, while the second, the negative lookahead, (?!(BAR|BAZ)).*$/, allows anything NOT /BA[RZ]/ followed by (your dot_deathstar, .* any number of any characters INCLUDING /BA[RZ]/.

    Judging by other replies, I wasn't the only one confounded thereby. yet very shortly after your clarifying example (in this node's parent) you got a reasonably general answer from Anonymonk (and re that answer, I'm not sure I buy the advice to "avoid as the plague the use of capturing groups in the decomposed regexes..." but the thought process outlined in that node deserves a ++ ((and got same from me)).

      while the second [...] allows anything NOT /BARZ/ followed by (your dot_deathstar, .* any number of any characters INCLUDING /BARZ/

      That's why I had added but of course this is not quite right, since it would also reject FOOBARX, but you are right that I should have been much more clear in my OP. I had included the (wrong) approach so that you don't believe I would just ask for help without at least trying to solve it on my own, but in the way I did it, it just caused a lot of confusion....

      -- 
      Ronald Fischer <ynnor@mm.st>