Ruby 2.2.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > MatchDataクラス
クラスの継承リスト: MatchData < Object < Kernel < BasicObject
正規表現のマッチに関する情報を扱うためのクラス。
このクラスのインスタンスは、
などにより得られます。
eql?(other) -> bool
[permalink][rdoc]self == other -> bool
self と other のマッチ対象になった文字列、元になった正規表現オブジェク ト、マッチした位置が等しければ true を返します。そうでない場合には false を返します。
文字列
s = "abc"
m1 = s.match("a")
m2 = s.match("b")
m1 == m2 # => false
m2 = s.match("a")
m1 == m2 # => true
正規表現
r = /abc/
m1 = r.match("abc") # => #<MatchData "abc">
m2 = r.match("abcde") # => #<MatchData "abc">
m1 == m2 # => false
m2 = r.match("abc") # => #<MatchData "abc">
m1 == m2 # => true
正規表現のマッチした位置
r = /abc/
m1 = r.match("abcabc") # => #<MatchData "abc">
m2 = r.match("abcabc", 3) # => #<MatchData "abc">
m1 == m2 # => false
m2 = r.match("abcabc", 0) # => #<MatchData "abc">
m1 == m2 # => true
self[n] -> String | nil
[permalink][rdoc]n 番目の部分文字列を返します。
0 はマッチ全体を意味します。 n の値が負の時には末尾からのインデックスと見倣します(末尾の 要素が -1 番目)。n 番目の要素が存在しない時には nil を返します。
例
/(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]
[permalink][rdoc]Range オブジェクト range の範囲にある要素からなる部分配列を返します。
例
/(foo)(bar)/ =~ "foobarbaz"
p $~[0..2] # => ["foobar", "foo", "bar"]
self[start, length] -> [String]
[permalink][rdoc]start 番目から length 個の要素を含む部分配列を返します。
例
/(foo)(bar)/ =~ "foobarbaz"
p $~[0, 3] # => ["foobar", "foo", "bar"]
[SEE_ALSO] Array#[]
self[name] -> String | nil
[permalink][rdoc]name という名前付きグループにマッチした文字列を返します。
例
/\$(?\d+)\.(?\d+)/ .match("$3.67")[:cents] # => "67"
/(?[a-zA-Z]+)|(?\d+)/ .match("aZq")[:num] # => nil
begin(n) -> Integer | nil
[permalink][rdoc]n 番目の部分文字列先頭のオフセットを返します。
0 はマッチ全体を意味します。 n 番目の部分文字列がマッチしていなければ nilを返します。
例
/(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]
[permalink][rdoc]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, MatchData#named_captures
end(n) -> Integer | nil
[permalink][rdoc]n 番目の部分文字列終端のオフセットを返します。
0 はマッチ全体を意味します。 n 番目の部分文字列がマッチしていなければ nil を返します。
例
/(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
hash -> Integer
[permalink][rdoc]self のマッチ対象になった文字列、元になった正規表現オブジェクト、マッチ した位置を元にハッシュ値を計算して返します。
inspect -> String
[permalink][rdoc]self の内容を人間に読みやすい文字列にして返します。
例
puts /.$/.match("foo").inspect
# => #<MatchData "o">
puts /(.)(.)(.)/.match("foo").inspect
# => #<MatchData "foo" 1:"f" 2:"o" 3:"o">
puts /(.)(.)?(.)/.match("fo").inspect
# => #<MatchData "fo" 1:"f" 2:nil 3:"o">
puts /(?.)(?.)(?.)/ .match("hoge").inspect
# => #<MatchData "hog" foo:"h" bar:"o" baz:"g">
length -> Integer
[permalink][rdoc]size -> Integer
部分文字列の数を返します(self.to_a.size と同じです)。
例
/(foo)(bar)(BAZ)?/ =~ "foobarbaz"
p $~.size # => 4
named_captures -> Hash
[permalink][rdoc]名前付きキャプチャをHashで返します。
Hashのキーは名前付きキャプチャの名前です。Hashの値はキーの名前に対応した名前付きグループのうち最後にマッチした文字列です。
例
m = /(?.)(?.)/.match("01")
m.named_captures # => {"a" => "0", "b" => "1"}
m = /(?.)(?.)?/.match("0")
m.named_captures # => {"a" => "0", "b" => nil}
m = /(?.)(?.)/.match("01")
m.named_captures # => {"a" => "1"}
m = /(?x)|(?y)/.match("x")
m.named_captures # => {"a" => "x"}
[SEE_ALSO] MatchData#captures
names -> [String]
[permalink][rdoc]名前付きキャプチャの名前を文字列配列で返します。
self.regexp.names と同じです。
例
/(?.)(?.)(?.)/ .match("hoge").names
# => ["foo", "bar", "baz"]
m = /(?.)(?.)?/ .match("a") # => #<MatchData "a" x:"a" y:nil>
m.names # => ["x", "y"]
offset(n) -> [Integer]
[permalink][rdoc]n 番目の部分文字列のオフセットの配列 [start, end] を返 します。
例
[ self.begin(n), self.end(n) ]
と同じです。n番目の部分文字列がマッチしていなければ [nil, nil] を返します。
[SEE_ALSO] MatchData#begin, MatchData#end
post_match -> String
[permalink][rdoc]マッチした部分より後ろの文字列を返します($'と同じ)。
例
/(bar)(BAZ)?/ =~ "foobarbaz"
p $~.post_match # => "baz"
[SEE_ALSO] MatchData#pre_match
pre_match -> String
[permalink][rdoc]マッチした部分より前の文字列を返します($`と同じ)。
例
/(bar)(BAZ)?/ =~ "foobarbaz"
p $~.pre_match # => "foo"
[SEE_ALSO] MatchData#post_match
regexp -> Regexp
[permalink][rdoc]自身の元になった正規表現オブジェクトを返します。
例
m = /a.*b/.match("abc")
m.regexp # => /a.*b/
string -> String
[permalink][rdoc]マッチ対象になった文字列の複製を返します。
返す文字列はフリーズ(Object#freeze)されています。
例
m = /(.)(.)(\d+)(\d)/.match("THX1138.")
m.string # => "THX1138."
to_a -> [String]
[permalink][rdoc]
例
/(foo)(bar)(BAZ)?/ =~ "foobarbaz"
p $~.to_a # => ["foobar", "foo", "bar", nil]
[SEE_ALSO] MatchData#captures
to_s -> String
[permalink][rdoc]マッチした文字列全体を返します。
例
/bar/ =~ "foobarbaz"
p $~ # => #<MatchData:0x401b1be4>
p $~.to_s # => "bar"
values_at(*index) -> [String]
[permalink][rdoc]正規表現中の n 番目の括弧にマッチした部分文字列の配列を返します。
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]
m = /(?\d+) *(?[+\-*\/]) *(?\d+)/ .match("1 + 2")
m.to_a # => ["1 + 2", "1", "+", "2"]
m.values_at(:a, :b, :op) # => ["1", "2", "+"]
[SEE_ALSO] Array#values_at, Array#[]