match(str, pos = 0) -> MatchData | nil[permalink][rdoc][edit]match(str, pos = 0) {|m| ... } -> object | nil(interned? str, ?int offset) → MatchData?[T] (interned? str, ?int offset) { (MatchData matchdata) → T } → T?(nil, ?int offset) ?{ (MatchData matchdata) → void } → nil-
指定された文字列
strに対して位置posからselfが表す正規表現によるマッチングを行います。マッチした場合には結果を MatchData オブジェクトで返します。マッチしなかった場合nilを返します。省略可能な第二引数
例posを指定すると、マッチの開始位置をposから行うよう制御できます(posのデフォルト値は0)。p(/(.).(.)/.match("foobar", 3).captures) # => ["b", "r"] p(/(.).(.)/.match("foobar", -3).captures) # => ["b", "r"]posを指定しても MatchData#offset 等の結果には影響しません。つまり、re.match(str[pos..-1])と
re.match(str, pos)は異なります。
ブロックを渡すと、マッチした場合に限り MatchData オブジェクトがブロック引数に渡されて実行されます。マッチした場合はブロックの値を返し、マッチしなかった場合は
例nilを返します。results = [] p /((.)\2)/.match("foo") {|m| results << m[0] } # => ["oo"] p /((.)\2)/.match("bar") {|m| results << m[0] } # => nil p results # => ["oo"]- [PARAM]
str: -
文字列を指定します。
strとの正規表現マッチを行います。 - [PARAM]
pos: -
整数を指定します。マッチの開始位置を
posから行うよう制御できます(posのデフォルト値は0)。
reg = Regexp.new("foo") if reg.match("foobar") puts "match" end # => match p reg.match("foobar") # => #<MatchData "foo"> p reg.match("bar") # => nil p /(foo)(bar)(baz)/.match("foobarbaz").to_a.values_at(1,2,3) # => ["foo", "bar", "baz"]便利な使いかた
正規表現にマッチした部分文字列だけが必要な場合に、
bar = /foo(.*)baz/.match("foobarbaz").to_a[1] foo, bar, baz = /(foo)(bar)(baz)/.match("foobarbaz").to_a.values_at(1,2,3)のように使用できます。(
to_aは、マッチに失敗した場合を考慮しています。)多重代入の規則では右辺が配列でない一つのオブジェクトで
例to_aメソッドを持つ場合、右辺に*を付けることでto_aの結果を利用できます。つまり、上記は以下のように書くことができます。(ここでの_は、$& を捨てるために適当に選んだ変数名)_, foo, bar, baz = */(foo)(bar)(baz)/.match("foobarbaz") p [foo, bar, baz] # => ["foo", "bar", "baz"]このような用途に MatchData#captures が使えると考えるかも知れませんが、
例capturesでは、マッチに失敗した場合、nil.capturesを呼び出そうとして例外 NoMethodError が発生してしまいます。foo, bar, baz = /(foo)(bar)(baz)/.match("foobar").captures # => -:1: undefined method 'captures' for nil:NilClass (NoMethodError)[SEE_ALSO] Regexp#match?
- [PARAM]