std.regex named matches

James Miller james at aatch.net
Mon Feb 20 19:34:42 PST 2012


On 20 February 2012 21:34, Dmitry Olshansky <dmitry.olsh at gmail.com> wrote:
> 08.02.2012 13:07, James Miller пишет:
>>
>> Hi,
>>
>> I am using std.regex and using the named matches. I would like to be
>> able to get at the names that have matched, since this is library
>> code.
>>
>> e.g.
>>
>>     auto m = match("test/2", regex(r"(?P<word>\w+)/(?P<num>\d)"));
>>     //either
>>     auto names = m.names;
>>     //or
>>     auto names = m.captures.names;
>>
>> or something similar. I've looked at the library and I can't find
>> anything of the sort, and you can't even use `foreach` to get at them
>> that way, I'm guessing because you can have both integer and string
>> indexes for the matches.
>>
>
> I know this is two weeks old, but you can do foreach on them:
> foreach(c; m.captures){
>        //c is each captured group in turn, the first one is the whole match
> }
>
>> Thanks
>>
>> James Miller
>
>

Yeah, the problem with that is that I want the /names/ of the matches,
that only returns the match. This was for library code, so the
developer passes the regex. There are workarounds, but I would have
liked to be able to do something more like

    auto names = m.captures.names;
    foreach (name; names) {
       writeln(name,": ", m.captures[name]);
    }

or even a straight AA-style foreach like this:

    foreach (name, match; m.captures) {
       writeln(name,": ", match);
    }

it was decided that more data was needed in regex anyway, but there
was no consensus as to how that should be implemented.


More information about the Digitalmars-d-learn mailing list