Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →
instance method
StringScanner#[]
(::Integer) -> ::String?
[](specifier) → substring or nil
ext/strscan/strscan.c
View on GitHub ↗
static VALUE
strscan_aref(VALUE self, VALUE idx)
{
struct strscanner *p;
rb_len_t i;
GET_SCANNER(self, p);
i = resolve_capture_index(p, idx);
if (i < 0) return Qnil;
return extract_range(p,
adjust_register_position(p, p->regs.beg[i]),
adjust_register_position(p, p->regs.end[i]));
}
Returns a captured substring or nil; see Captured Match Values.
When there are captures:
Example
scanner = StringScanner.new('Fri Dec 12 1975 14:39') scanner.scan(/(?<wday>\w+) (?<month>\w+) (?<day>\d+) /)
-
specifierzero: returns the entire matched substring:Examplescanner[0] # => "Fri Dec 12 " scanner.pre_match # => "" scanner.post_match # => "1975 14:39"
-
specifierpositive integer. returns thenth capture, ornilif out of range:Examplescanner[1] # => "Fri" scanner[2] # => "Dec" scanner[3] # => "12" scanner[4] # => nil
-
specifiernegative integer. counts backward from the last subgroup:Examplescanner[-1] # => "12" scanner[-4] # => "Fri Dec 12 " scanner[-5] # => nil
-
specifiersymbol or string. returns the named subgroup, ornilif no such:Examplescanner[:wday] # => "Fri" scanner['wday'] # => "Fri" scanner[:month] # => "Dec" scanner[:day] # => "12" scanner[:nope] # => nil
When there are no captures, only [0] returns non-nil:
Example
scanner = StringScanner.new('foobarbaz') scanner.exist?(/bar/) scanner[0] # => "bar" scanner[1] # => nil
For a failed match, even [0] returns nil:
Example
scanner.scan(/nope/) # => nil scanner[0] # => nil scanner[1] # => nil