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