www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - regex get names

reply "James Miller" <james aatch.net> writes:
I posted something similar learn, but since this is a request, 
not a question I'm going to reiterate it here.

After looking through std.regex, it would be useful if there was 
a way to get the names of the named matches from the Captures. 
e.g. R[] names = m.getNames(). With the idea being that each name 
is one of the named sub-expressions from (?P<name>...).

I could probably make the change myself, but I want to get any 
opinions on why this is not a good idea before doing so.
Feb 08 2012
parent Dmitry Olshansky <dmitry.olsh gmail.com> writes:
On 08.02.2012 13:44, James Miller wrote:
 I posted something similar learn, but since this is a request, not a
 question I'm going to reiterate it here.

 After looking through std.regex, it would be useful if there was a way
 to get the names of the named matches from the Captures. e.g. R[] names
 = m.getNames(). With the idea being that each name is one of the named
 sub-expressions from (?P<name>...).

 I could probably make the change myself, but I want to get any opinions
 on why this is not a good idea before doing so.

Actually I believe it's a question of adding some introspection methods/properties to Regex struct. That's something we need - names, number of captures and number <---> name correspondence. As for the request as is, when returning plain arrays for internals of objects I'm weary of one thing - it's either a) aliasing as const(R)[] b) duping the the internal array / allocating and filling a new one As long as internals of Regex are GC allocated and slicable we're fine with a). The b) option can get nasty as it adds overhead for innocently looking operations though they shouldn't be frequent. Personally, I'm more into returning a thin wrapped random-access range, that could be just map!"a.name"(dict), more importantly it can change it's mechanics later on. -- Dmitry Olshansky
Feb 08 2012