From: "Hanmac (Hans Mackowiak)" <noreply@...> Date: 2021-09-16T16:02:26+00:00 Subject: [ruby-core:105311] [Ruby master Feature#18172] MatchData#sublen to return the length of a substring Issue #18172 has been updated by Hanmac (Hans Mackowiak). nobu (Nobuyoshi Nakada) wrote in #note-4: > Hanmac (Hans Mackowiak) wrote in #note-3: > > @nobu, isn't your `MatchData#match` the same as `MatchData#[]` ? > > Similar, but `#match` accepts only single index/name, but not a range or an optional length. i just wonder why not use the functions there like done in the other method? ``` c if (FIXNUM_P(idx)) { return rb_reg_nth_match(FIX2INT(idx), match); } else { int num = namev_to_backref_number(RMATCH_REGS(match), RMATCH(match)->regexp, idx); if (num >= 0) { return rb_reg_nth_match(num, match); } else { return match_ary_aref(match, idx, Qnil); } } ``` ---------------------------------------- Feature #18172: MatchData#sublen to return the length of a substring https://bugs.ruby-lang.org/issues/18172#change-93724 * Author: nobu (Nobuyoshi Nakada) * Status: Closed * Priority: Normal ---------------------------------------- There are many code taking the length of a substring matched by `Regexp`. For instance, in rdoc/markup/attribute_manager.rb: ```ruby attr_updated = attrs.set_attrs($`.length + $1.length + $2.length, $3.length, attr) if attr_updated $1 + NULL * $2.length + $3 + NULL * $2.length + $4 ``` People often tends to use such code (although the first addition can be simpler as `$~.begin(3)`), that creates and soon drops substrings, just to take the length. Therefore, how about the new method to calculate the length, `MatchData#sublen`? ```ruby /(\d+)\W(\w+)/ =~ "1:foo" $~.sublen(1) #=> 1 $~.sublen(2) #=> 3 ``` -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>