Class: RE2::MatchData

Inherits:
Object
  • Object
show all
Defined in:
ext/re2/re2.cc

Instance Method Summary collapse

Instance Method Details

#[](index) ⇒ String? #[](start, length) ⇒ Array<String, nil> #[](range) ⇒ Array<String, nil> #[](name) ⇒ String?

Retrieve zero, one or more matches by index or name.

Overloads:

  • #[](index) ⇒ String?

    Access a particular match by index.

    Examples:

    m = RE2::Regexp.new('(\d+)').match("bob 123")
    m[0]    #=> "123"

    Parameters:

    • index (Fixnum)

      the index of the match to fetch

    Returns:

    • (String, nil)

      the specified match

  • #[](start, length) ⇒ Array<String, nil>

    Access a range of matches by starting index and length.

    Examples:

    m = RE2::Regexp.new('(\d+)').match("bob 123")
    m[0, 1]    #=> ["123"]

    Parameters:

    • start (Fixnum)

      the index from which to start

    • length (Fixnum)

      the number of elements to fetch

    Returns:

    • (Array<String, nil>)

      the specified matches

  • #[](range) ⇒ Array<String, nil>

    Access a range of matches by index.

    Examples:

    m = RE2::Regexp.new('(\d+)').match("bob 123")
    m[0..1]    #=> "[123", "123"]

    Parameters:

    • range (Range)

      the range of match indexes to fetch

    Returns:

    • (Array<String, nil>)

      the specified matches

  • #[](name) ⇒ String?

    Access a particular match by name.

    Examples:

    m = RE2::Regexp.new('(?P<number>\d+)').match("bob 123")
    m["number"] #=> "123"
    m[:number]  #=> "123"

    Parameters:

    • name (String, Symbol)

      the name of the match to fetch

    Returns:

    • (String, nil)

      the specific match

Returns:



394
395
396
397
398
399
400
401
402
403
404
405
406
407
# File 'ext/re2/re2.cc', line 394

static VALUE re2_matchdata_aref(int argc, VALUE *argv, VALUE self) {
  VALUE idx, rest;
  rb_scan_args(argc, argv, "11", &idx, &rest);

  if (TYPE(idx) == T_STRING) {
    return re2_matchdata_named_match(StringValuePtr(idx), self);
  } else if (SYMBOL_P(idx)) {
    return re2_matchdata_named_match(rb_id2name(SYM2ID(idx)), self);
  } else if (!NIL_P(rest) || !FIXNUM_P(idx) || FIX2INT(idx) < 0) {
    return rb_ary_aref(argc, argv, re2_matchdata_to_a(self));
  } else {
    return re2_matchdata_nth_match(FIX2INT(idx), self);
  }
}

#inspectString

Returns a printable version of the match.

Examples:

m = RE2::Regexp.new('(\d+)').match("bob 123")
m.inspect    #=> "#<RE2::MatchData \"123\" 1:\"123\">"

Returns:

  • (String)

    a printable version of the match



426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
# File 'ext/re2/re2.cc', line 426

static VALUE re2_matchdata_inspect(VALUE self) {
  int i;
  re2_matchdata *m;
  re2_pattern *p;
  VALUE match, result;
  ostringstream output;

  Data_Get_Struct(self, re2_matchdata, m);
  Data_Get_Struct(m->regexp, re2_pattern, p);

  output << "#<RE2::MatchData";

  for (i = 0; i < m->number_of_matches; i++) {
    output << " ";

    if (i > 0) {
      output << i << ":";
    }

    match = re2_matchdata_nth_match(i, self);

    if (match == Qnil) {
      output << "nil";
    } else {
      output << "\"" << StringValuePtr(match) << "\"";
    }
  }

  output << ">";

  result = ENCODED_STR_NEW(output.str().data(), output.str().length(),
      p->pattern->options().utf8() ? "UTF-8" : "ISO-8859-1");

  return result;
}

#lengthFixnum

Returns the number of elements in the match array (including nils).

Examples:

m = RE2::Regexp.new('(\d+)').match("bob 123")
m.size      #=> 2
m.length    #=> 2

Returns:

  • (Fixnum)

    the number of elements



235
236
237
238
239
240
# File 'ext/re2/re2.cc', line 235

static VALUE re2_matchdata_size(VALUE self) {
  re2_matchdata *m;
  Data_Get_Struct(self, re2_matchdata, m);

  return INT2FIX(m->number_of_matches);
}

#regexpRE2::Regexp

Returns the Regexp used in the match.

Examples:

m = RE2::Regexp.new('(\d+)').match("bob 123")
m.regexp    #=> #<RE2::Regexp /(\d+)/>

Returns:



250
251
252
253
254
# File 'ext/re2/re2.cc', line 250

static VALUE re2_matchdata_regexp(VALUE self) {
  re2_matchdata *m;
  Data_Get_Struct(self, re2_matchdata, m);
  return m->regexp;
}

#sizeFixnum

Returns the number of elements in the match array (including nils).

Examples:

m = RE2::Regexp.new('(\d+)').match("bob 123")
m.size      #=> 2
m.length    #=> 2

Returns:

  • (Fixnum)

    the number of elements



235
236
237
238
239
240
# File 'ext/re2/re2.cc', line 235

static VALUE re2_matchdata_size(VALUE self) {
  re2_matchdata *m;
  Data_Get_Struct(self, re2_matchdata, m);

  return INT2FIX(m->number_of_matches);
}

#stringString

Returns a frozen copy of the string passed into match.

Examples:

m = RE2::Regexp.new('(\d+)').match("bob 123")
m.string  #=> "bob 123"

Returns:

  • (String)

    a frozen copy of the passed string.



136
137
138
139
140
141
# File 'ext/re2/re2.cc', line 136

static VALUE re2_matchdata_string(VALUE self) {
  re2_matchdata *m;
  Data_Get_Struct(self, re2_matchdata, m);

  return m->text;
}

#to_aArray<String, nil>

Returns the array of matches.

Examples:

m = RE2::Regexp.new('(\d+)').match("bob 123")
m.to_a    #=> ["123", "123"]

Returns:

  • (Array<String, nil>)

    the array of matches



284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
# File 'ext/re2/re2.cc', line 284

static VALUE re2_matchdata_to_a(VALUE self) {
  int i;
  re2_matchdata *m;
  re2_pattern *p;
  re2::StringPiece *match;
  VALUE array;

  Data_Get_Struct(self, re2_matchdata, m);
  Data_Get_Struct(m->regexp, re2_pattern, p);

  array = rb_ary_new2(m->number_of_matches);
  for (i = 0; i < m->number_of_matches; i++) {
    match = &m->matches[i];

    if (match->empty()) {
      rb_ary_push(array, Qnil);
    } else {
      rb_ary_push(array, ENCODED_STR_NEW(match->data(), match->size(),
            p->pattern->options().utf8() ? "UTF-8" : "ISO-8859-1"));
    }
  }

  return array;
}

#to_sString

Returns the entire matched string.

Returns:

  • (String)

    the entire matched string



414
415
416
# File 'ext/re2/re2.cc', line 414

static VALUE re2_matchdata_to_s(VALUE self) {
  return re2_matchdata_nth_match(0, self);
}