Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > MatchDataクラス

class MatchData

クラスの継承リスト: MatchData < Object < Kernel

要約

正規表現のマッチに関する情報を扱うためのクラス。

このクラスのインスタンスは、

などにより得られます。

インスタンスメソッド

self[n] -> String | nil

n 番目の部分文字列を返します。

0 はマッチ全体を意味します。 n の値が負の時には末尾からのインデックスと見倣します(末尾の 要素が -1 番目)。n 番目の要素が存在しない時には nil を返します。

[PARAM] n:
返す部分文字列のインデックスを指定します。
/(foo)(bar)(BAZ)?/ =~ "foobarbaz"
p $~.to_a       # => ["foobar", "foo", "bar", nil]
p $~[0]         # => "foobar"
p $~[1]         # => "foo"
p $~[2]         # => "bar"
p $~[3]         # => nil        (マッチしていない)
p $~[4]         # => nil        (範囲外)
p $~[-2]        # => "bar"
self[range] -> [String]

Range オブジェクト range の範囲にある要素からなる部分配列を返します。

[PARAM] range:
start..end 範囲式。
/(foo)(bar)/ =~ "foobarbaz"
p $~[0..2]      # => ["foobar", "foo", "bar"]
self[start, length] -> [String]

start 番目から length 個の要素を含む部分配列を返します。

/(foo)(bar)/ =~ "foobarbaz"
p $~[0, 3]      # => ["foobar", "foo", "bar"]

[SEE_ALSO] Array#[]

begin(n) -> Fixnum | nil

n 番目の部分文字列先頭のオフセットを返します。

0 はマッチ全体を意味します。 n 番目の部分文字列がマッチしていなければ nilを返します。

[PARAM] n:
部分文字列を指定する数値。
[EXCEPTION] IndexError:
範囲外の n を指定した場合に発生します。
/(foo)(bar)(BAZ)?/ =~ "foobarbaz"
p $~.begin(0)   # => 0
p $~.begin(1)   # => 0
p $~.begin(2)   # => 3
p $~.begin(3)   # => nil
p $~.begin(4)   # => `begin': index 4 out of matches (IndexError)

[SEE_ALSO] MatchData#end

captures -> [String]

$1, $2, ... を格納した配列を返します。

MatchData#to_a と異なり $& を要素に含みません。 グループにマッチした部分文字列がなければ対応する要素は nil になります。

/(foo)(bar)(BAZ)?/ =~ "foobarbaz"
p $~.to_a       # => ["foobar", "foo", "bar", nil]
p $~.captures       # => ["foo", "bar", nil]

[SEE_ALSO] MatchData#to_a

end(n) -> Fixnum | nil

n 番目の部分文字列終端のオフセットを返します。

0 はマッチ全体を意味します。 n 番目の部分文字列がマッチしていなければ nil を返します。

[PARAM] n:
部分文字列を指定する数値。
[EXCEPTION] IndexError:
範囲外の n を指定した場合に発生します。
/(foo)(bar)(BAZ)?/ =~ "foobarbaz"
p $~.end(0)   # => 6
p $~.end(1)   # => 3
p $~.end(2)   # => 6
p $~.end(3)   # => nil
p $~.end(4)   # => `end': index 4 out of matches (IndexError)

[SEE_ALSO] MatchData#begin

length -> Fixnum
size -> Fixnum

部分文字列の数を返します(self.to_a.size と同じです)。

/(foo)(bar)(BAZ)?/ =~ "foobarbaz"
p $~.size       # => 4
offset(n) -> [Fixnum]

n 番目の部分文字列のオフセットの配列 [start, end] を返 します。

[ self.begin(n), self.end(n) ]

と同じです。n番目の部分文字列がマッチしていなければ [nil, nil] を返します。

[PARAM] n:
部分文字列を指定する数値
[EXCEPTION] IndexError:
範囲外の n を指定した場合に発生します。

[SEE_ALSO] MatchData#begin, MatchData#end

post_match -> String

マッチした部分より後ろの文字列を返します($'と同じ)。

/(bar)(BAZ)?/ =~ "foobarbaz"
p $~.post_match # => "baz"
pre_match -> String

マッチした部分より前の文字列を返します($`と同じ)。

/(bar)(BAZ)?/ =~ "foobarbaz"
p $~.pre_match  # => "foo"
select {|s| ... } -> [String]

各要素に対してブロックを評価した値が真であった要素を全て含む配列を 返します。真になる要素がひとつもなかった場合は空の配列を返します。

self.to_a.select { ... } と同じです。

m = /(.)(.)(\d+)(\d)/.match("THX1138: The Movie")
p m.select{|x| /X/ =~ x}   #=> ["HX1138", "X"]
string -> String

マッチ対象になった文字列の複製を返します。

返す文字列はフリーズ(Object#freeze)されています。

to_a -> [String]

$&, $1, $2,... を格納した配列を返します。

/(foo)(bar)(BAZ)?/ =~ "foobarbaz"
p $~.to_a       # => ["foobar", "foo", "bar", nil]

[SEE_ALSO] MatchData#captures

to_s -> String

マッチした文字列全体を返します。

/bar/ =~ "foobarbaz"
p $~            # => #<MatchData:0x401b1be4>
p $~.to_s       # => "bar"
values_at(*index) -> [String]

正規表現中の n 番目の括弧にマッチした部分文字列の配列を返します。

0 番目は $& のようにマッチした文字列全体を表します。

[PARAM] index:
インデックスを整数で 0 個以上指定します。
m = /(foo)(bar)(baz)/.match("foobarbaz")
# same as m.to_a.values_at(...)
p m.values_at(0, 1, 2, 3, 4)      #=> ["foobarbaz", "foo", "bar", "baz", nil]
p m.values_at(-1, -2, -3, -4, -5) #=> ["baz", "bar", "foo", nil, nil]

[SEE_ALSO] Array#values_at, Array#[]

class MatchData