Re: RFC 72 (v3) Variable-length lookbehind: the regexp engine should also go backward.

[email protected] (Bart Lateur) Tue, 05 Sep 2000 19:08:57 +0200
Newsgroups perl.perl6.language.regex
Organization MediaMind
Message-ID <[email protected]>
On Sat, 2 Sep 2000 15:16:20 -0400, Peter Heslin wrote:

>> This looks more natural to me:
>> 
>> 	/(?`!G+A+T+)GA+C/

>Your version is closer to the way lookbehind works now, so this syntax
>might be thought to be clearer; I should add to the RFC an explicit
>note about this.

Look at your original requirement:

>>If you want to match text that matches /GA+C/, but not when it
>>follows /G+A+T+/,

I find that "my" syntax most closely matches this requirement.

The reason why I find it clearer is because it states WHAT it should
match, not HOW it should match.

>Perhaps the same functionality I want could be
>achieved with your syntax.  Would /(?`!G+A+T+)(?:GA+)C/ mean "Match GA+,
>then do the lookbehind, then match C"?  Is so, I'd be happy with that.

I have the feeling that you're looking too close to the implementation
details. Lookbehind of a more complicated kind, like this one, should
*automatically* be postponed until a time where it would make sense. At
least, this thing should find a "G", of even "GA", before even
reconsidering that it must be preceded by a "T", let alone something
that matches /G+A+T+/.

But, that is not your problem. That is a problem of regex optimization.

I feel that your originally proposed syntax is weird. Look at this
variation:

	/GA+(?:C(?!(?r)T+A+G+)|T(?!(?r)G+A+C+))/

which says: /GA+C/ but not preceded with /T+A+G+/, or /GA+T/ but not
preceded with /G+A+C+/.

The discrepancy between *where* this is specified, and where it should
match, really bugs me.

Here's my version:

	/(?`!T+A+G+)GA+C|(?`!G+A+C+)GA+T/

You gain nothing, you loose clarity.

p.s. /(?`!T+A+G+)/ does not mean: must match something that doesn't
match /T+A+G+/. Instead, if something, *anything*, can match it, the
whole match fails.

-- 
	Bart.