develooper Front page | perl.perl6.language.regex | Postings from December 2000

Re: Perl 5's "non-greedy" matching can be TOO greedy!

Thread Previous | Thread Next
Deven T. Corzine
December 15, 2000 11:37
Re: Perl 5's "non-greedy" matching can be TOO greedy!
Message ID:

On Fri, 15 Dec 2000, Jonathan Scott Duff wrote:

> On Fri, Dec 15, 2000 at 01:13:13PM -0500, Deven T. Corzine wrote:
> > Not at all.  I don't want it to keep looking after it finds the first
> > match.  I want it to make sure that match isn't unnecessarily long, if
> > non-greedy matching was in use.  Conceptually (I don't think this would be
> > a good implementation), you find the first match as the current engine
> > does, then search for the smallest possible match WITHIN that first match.
> This still sounds like "keep looking after it finds the first match"
> to me.

No, it's "find the first match and trim it if necessary to be less greedy".

> > Since it will already be as short as possible from the starting point, this
> > amounts to advancing the starting point as far as possible without changing
> > the ending point, as long as it still matches.
> Given that the behavior you are looking for is already available and
> under programmer control, what are you really asking for?  Do you want
> the default behavior of the RE engine to change and if so, how would
> we get the current behavior?

I've yet to see a concrete example of where the current behavior is
helpful, but it would be a matter of changing the regexp to be what you
actually want.  For the specific example I gave, "b+.*?d" would match
"bbbbccccd" under the current behavior AND with my proposed behavior -- but
I'm still having a hard time thinking of a real-life case where the current
behavior would actually make life easier for the programmer...


Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About