class Regex::MatchData

Overview

Regex::MatchData is the type of the special variable $~, and is the type returned by Regex#match and String#match. It encapsulates all the results of a regular expression match.

Regex#match and String#match can return nil, to represent an unsuccessful match, but there are overloads of both methods that accept a block. These overloads are convenient to access the Regex::MatchData of a successful match, since the block argument can't be nil.

"Crystal".match(/[p-s]/).size # => undefined method 'size' for Nil

"Crystal".match(/[p-s]/) do |md|
  md.string # => "Crystal"
  md[0]     # => "r"
  md[1]?    # => nil
end

Many Regex::MatchData methods deal with capture groups, and accept an integer argument to select the desired capture group. Capture groups are numbered starting from 1, so that 0 can be used to refer to the entire regular expression without needing to capture it explicitly.

Defined in:

regex/match_data.cr

Instance Method Summary

Instance methods inherited from class Reference

! !, ==(other)
==(other : self)
==
, hash hash, inspect(io : IO) : Nil inspect, nil? nil?, object_id object_id, same?(other : Nil)
same?(other : Reference)
same?
, to_s(io : IO) : Nil to_s

Instance methods inherited from class Object

! !, !=(other) !=, !~(other) !~, ==(other) ==, ===(other) ===, =~(other) =~, class class, clone clone, crystal_type_id crystal_type_id, dup dup, hash hash, inspect
inspect(io : IO)
inspect
, itself itself, not_nil! not_nil!, tap(&block) tap, to_json to_json, to_pretty_json(io : IO)
to_pretty_json
to_pretty_json
, to_s
to_s(io : IO)
to_s
, to_yaml(io : IO)
to_yaml
to_yaml
, try(&block) try

Class methods inherited from class Object

==(other : Class) ==, ===(other) ===, cast(other) : self cast, from_json(string_or_io) from_json, from_yaml(string : String) from_yaml, hash hash, inspect(io) inspect, name : String name, to_s(io) to_s

Instance Method Detail

def [](group_name : String) #

Returns the match of the capture group named by group_name, or raises an ArgumentError if there is no such named capture group.

"Crystal".match(/r(?<ok>ys)/) { |md| md["ok"] } # => "ys"
"Crystal".match(/r(?<ok>ys)/) { |md| md["ng"] } # => raises ArgumentError

[View source]
def [](n) #

Returns the match of the nth capture group, or raises an IndexError if there is no nth capture group.

"Crystal".match(/r(ys)/) { |md| md[1]? } # => "ys"
"Crystal".match(/r(ys)/) { |md| md[2]? } # => raises IndexError

[View source]
def []?(group_name : String) #

Returns the match of the capture group named by group_name, or nil if there is no such named capture group.

"Crystal".match(/r(?<ok>ys)/) { |md| md["ok"]? } # => "ys"
"Crystal".match(/r(?<ok>ys)/) { |md| md["ng"]? } # => nil

[View source]
def []?(n) #

Returns the match of the nth capture group, or nil if there isn't an nth capture group.

When n is 0, returns the match for the entire Regex.

"Crystal".match(/r(ys)/) { |md| md[0]? } # => "rys"
"Crystal".match(/r(ys)/) { |md| md[1]? } # => "ys"
"Crystal".match(/r(ys)/) { |md| md[2]? } # => nil

[View source]
def begin(n = 0) #

Return the position of the first character of the nth match.

When n is 0 or not given, uses the match of the entire Regex. Otherwise, uses the match of the nth capture group.

"Crystal".match(/r/) { |md| md.begin(0) }     # => 1
"Crystal".match(/r(ys)/) { |md| md.begin(1) } # => 2
"クリスタル".match(/リ(ス)/) { |md| md.begin(0) }    # => 1

[View source]
def byte_begin(n = 0) #

Return the position of the first byte of the nth match.

When n is 0 or not given, uses the match of the entire Regex. Otherwise, uses the match of the nth capture group.

"Crystal".match(/r/) { |md| md.byte_begin(0) }     # => 1
"Crystal".match(/r(ys)/) { |md| md.byte_begin(1) } # => 4
"クリスタル".match(/リ(ス)/) { |md| md.byte_begin(0) }    # => 3

[View source]
def byte_end(n = 0) #

Return the position of the next byte after the match.

When n is 0 or not given, uses the match of the entire Regex. Otherwise, uses the match of the nth capture group.

"Crystal".match(/r/) { |md| md.byte_end(0) }     # => 2
"Crystal".match(/r(ys)/) { |md| md.byte_end(1) } # => 4
"クリスタル".match(/リ(ス)/) { |md| md.byte_end(0) }    # => 9

[View source]
def end(n = 0) #

Return the position of the next character after the match.

When n is 0 or not given, uses the match of the entire Regex. Otherwise, uses the match of the nth capture group.

"Crystal".match(/r/) { |md| md.end(0) }     # => 2
"Crystal".match(/r(ys)/) { |md| md.end(1) } # => 4
"クリスタル".match(/リ(ス)/) { |md| md.end(0) }    # => 3

[View source]
def inspect(io : IO) #

[View source]
def post_match #

Returns the part of the original string after the match. If the match ends at the end of the string, returns the empty string.

"Crystal".match(/yst/) { |md| md.post_match } # => "al"

[View source]
def pre_match #

Returns the part of the original string before the match. If the match starts at the start of the string, returns the empty string.

"Crystal".match(/yst/) { |md| md.pre_match } # => "Cr"

[View source]
def regex #

Returns the original regular expression.

"Crystal".match(/[p-s]/) { |md| md.regex } # => /[p-s]/

[View source]
def size #

Returns the number of capture groups, including named capture groups.

"Crystal".match(/[p-s]/) { |md| md.size }          # => 0
"Crystal".match(/r(ys)/) { |md| md.size }          # => 1
"Crystal".match(/r(ys)(?<ok>ta)/) { |md| md.size } # => 2

[View source]
def string #

Returns the original string.

"Crystal".match(/[p-s]/) { |md| md.string } # => "Crystal"

[View source]
def to_s(io : IO) #

[View source]