VOOZH about

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

⇱ String#index - APIdock


method

index

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

Returns the index of the first 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 begin the search.

"hello".index('e') #=> 1
"hello".index('lo') #=> 3
"hello".index('a') #=> nil
"hello".index(?e) #=> 1
"hello".index(/[aeiou]/, -3) #=> 4
static VALUE
rb_str_index_m(int argc, VALUE *argv, VALUE str)
{
 VALUE sub;
 VALUE initpos;
 long pos;

 if (rb_scan_args(argc, argv, "11", &sub, &initpos) == 2) {
 pos = NUM2LONG(initpos);
 }
 else {
 pos = 0;
 }
 if (pos < 0) {
 pos += str_strlen(str, NULL);
 if (pos < 0) {
 if (RB_TYPE_P(sub, T_REGEXP)) {
 rb_backref_set(Qnil);
 }
 return Qnil;
 }
 }

 if (SPECIAL_CONST_P(sub)) goto generic;
 switch (BUILTIN_TYPE(sub)) {
 case T_REGEXP:
 if (pos > str_strlen(str, NULL))
 return Qnil;
 pos = str_offset(RSTRING_PTR(str), RSTRING_END(str), pos,
 rb_enc_check(str, sub), single_byte_optimizable(str));

 pos = rb_reg_search(sub, str, pos, 0);
 pos = rb_str_sublen(str, 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_index(str, sub, pos);
 pos = rb_str_sublen(str, pos);
 break;
 }

 if (pos == -1) return Qnil;
 return LONG2NUM(pos);
}

Related methods