VOOZH about

URL: https://apidock.com/ruby/String/rindex

⇱ String#rindex - APIdock


method

rindex

ruby latest stable - Class: String
rindex(p1, p2 = v2)
public

Returns the index of the last occurrence of the given substring or pattern (regexp) in str. Returns nil if not found. If the second parameter is present, it specifies the position in the string to end the search—characters beyond this point will not be considered.

"hello".rindex('e') #=> 1
"hello".rindex('l') #=> 3
"hello".rindex('a') #=> nil
"hello".rindex(?e) #=> 1
"hello".rindex(/[aeiou]/, -2) #=> 1
static VALUE
rb_str_rindex_m(int argc, VALUE *argv, VALUE str)
{
 VALUE sub;
 VALUE vpos;
 rb_encoding *enc = STR_ENC_GET(str);
 long pos, len = str_strlen(str, enc); /* str's enc */

 if (rb_scan_args(argc, argv, "11", &sub, &vpos) == 2) {
 pos = NUM2LONG(vpos);
 if (pos < 0) {
 pos += len;
 if (pos < 0) {
 if (RB_TYPE_P(sub, T_REGEXP)) {
 rb_backref_set(Qnil);
 }
 return Qnil;
 }
 }
 if (pos > len) pos = len;
 }
 else {
 pos = len;
 }

 if (SPECIAL_CONST_P(sub)) goto generic;
 switch (BUILTIN_TYPE(sub)) {
 case T_REGEXP:
 /* enc = rb_get_check(str, sub); */
 pos = str_offset(RSTRING_PTR(str), RSTRING_END(str), pos,
 enc, single_byte_optimizable(str));

 pos = rb_reg_search(sub, str, pos, 1);
 pos = rb_str_sublen(str, pos);
 if (pos >= 0) return LONG2NUM(pos);
 break;

 generic:
 default: {
 VALUE tmp;

 tmp = rb_check_string_type(sub);
 if (NIL_P(tmp)) {
 rb_raise(rb_eTypeError, "type mismatch: %s given",
 rb_obj_classname(sub));
 }
 sub = tmp;
 }
 /* fall through */
 case T_STRING:
 pos = rb_str_rindex(str, sub, pos);
 if (pos >= 0) return LONG2NUM(pos);
 break;
 }
 return Qnil;
}

Related methods