Re: RFC 166 (does-not-match)

[email protected] (Tom Christiansen)
Newsgroups perl.perl6.language.regex
Message-ID <31137.967573595@chthon>
>I can tighten the definition up.  If there have been calls for a 
>(?^baz) type construct before, there will be again.  It is a matter of
>getting the definition straightforward and useable.


Are you really just wanting !/BAD/ there?  That is, something
that isn't matched by /BAD/?  One would, of course, normally
simply write !/BAD/, or perhaps !~ /BAD/.  However, if reading
a config file of patterns, you can't go invert the sense of the
match.

Well, easily, that is.

The Perl Cookbook, in Chapter 6, has these solutions:

 *  True if either C</ALPHA/> or C</BETA/> matches, like C</ALPHA/ || /BETA/>:

	/ALPHA|BETA/

 *  True if both C</ALPHA/> and C</BETA/> match, but may overlap, meaning
    that C<"BETALPHA"> should be ok, like C</ALPHA/ && /BETA/>:

	/^(?=.*ALPHA)(?=.*BETA)/s

 *  True if both C</ALPHA/> and C</BETA/> match, but may not overlap,
    meaning that C<"BETALPHA"> should fail:

	/ALPHA.*BETA|BETA.*ALPHA/s

 *  True if pattern C</PAT/> does not match, like C<$var !~ /PAT/>:

	/^(?:(?!PAT).)*$/s

 *  True if pattern C<BAD> does not match, but pattern C<GOOD> does:

	/(?=^(?:(?!BAD).)*$)GOOD/s

I suspect the penultimate is just what you're looking for.  

Or shall I go back and deepread the whole thread? :-(

--tom
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.