Heyho,
I would like to propose a method for returning all named groups of a
MatchData object as Array:
m = /(?\w+) (?\w+)/.match("Robert R.")
m.groups
#=> ["forename", "surname"]
lets you create an own Hash easily if the Hash-like MatchData
doesn’t suit you
Hash[*m.groups.zip(m.captures).flatten]
#=> {“forename”=>“Robert”, “surname”=>“Retzbach”}
This is my first time creating Ruby ext in C, so please explain to me
any mistakes
Here is the svn diff:
---->8----
Index: re.c
— re.c (Revision 12173)
+++ re.c (Arbeitskopie)
@@ -1334,7 +1334,36 @@
return rb_reg_nth_match(n, match);
}
+/*
-
- call-seq:
-
-
mtch.groups => array
-
-
-
- Returns the array of all named groups of the Regexp.
-
-
-
ng = /(?<firstchar>.)(.)(\d+)(?<lastnum>
-
\d)/.match(“THX1138.”).groups
-
-
ng[0] #=> "firstchar"
-
-
-
ng[1] #=> "lastnum"
-
- */
+static int
+i_add_a_group(const UChar* name, const UChar* name_end, int back_num,
int* back_refs, regex_t* reg, void* arg)
+{
- rb_ary_push(arg, rb_str_new(name, name_end - name));
- return 0;
+}
+static VALUE
+match_groups(VALUE match)
+{
- VALUE ary;
- ary = rb_ary_new();
- onig_foreach_name(RREGEXP(RMATCH(match)->regexp)->ptr,
i_add_a_group, ary); - return ary;
+}
/*
- call-seq:
if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4)
@@ -2387,6 +2416,7 @@
rb_define_method(rb_cMatch, “end”, match_end, 1);
rb_define_method(rb_cMatch, “to_a”, match_to_a, 0);
rb_define_method(rb_cMatch, “[]”, match_aref, -1);
- rb_define_method(rb_cMatch, “groups”, match_groups, 0);
rb_define_method(rb_cMatch, “captures”, match_captures, 0);
rb_define_method(rb_cMatch, “select”, match_select, -1);
rb_define_method(rb_cMatch, “values_at”, match_values_at, -1);
---->8----
I just updated the svn ruby and tried it:
% ./ruby -e ‘p ng = /(?.)(.)(\d+)(?
\d)/.match(“THX1138.”).groups’
[“firstchar”, “lastnum”]
Now I have some questions to this extension? Is this the right place
for such a proposal?
Should the method groups belong rather to Regexp?
Any other idea to improve this?
Thanks for reading.
I should advertise this with beatiful pics of woman presenting my code
a la ebay