Re: Perl 5's "non-greedy" matching can be TOO greedy!
[email protected] ("Deven T. Corzine") Fri, 15 Dec 2000 14:36:58 -0500 (EST)
| Newsgroups | perl.perl6.language.regex |
|---|---|
| Message-ID | <[email protected]> |
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... Deven