Regex-Fu

Namespace via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon May 25 04:18:18 PDT 2015


On Monday, 25 May 2015 at 11:11:50 UTC, Chris wrote:
> I'm a bit at a loss here. I cannot get the longest possible 
> match. I tried several versions with eager operators and stuff, 
> but D's regex engine(s) always seem to return the shortest 
> match. Is there something embarrassingly simple I'm missing?
>
> void main()
> {
>   import std.regex : regex, matchFirst;
>   import std.stdio : writeln;
>
>   auto word = "blablahula";
>   auto m = matchFirst(word, regex("^([a-z]+)(hula|ula)$"));
>   writeln(m);  // prints ["blablahula", "blablah", "ula"]
> }
>
> I want it to return "hula" not "ula".

Make the + operator less greedy:

matchFirst(word, regex("^([a-z]+?)(hula|ula)$"));


More information about the Digitalmars-d-learn mailing list