正規表現 matchメソッド
Ruby認定試験対策問題の解説の中で、分からない箇所があったので、教えてください。
■問題9の一部
s = "I slit the sheet, the sheet I slit, and on the slitted sheet I sit."
/sheet/.match(s).length
■説明
文字列sの中と正規表現/sheet/にマッチした全体の文字列とマッチした部分文字列の配列の数を取得します。
■回答
=> 1
■irbで自分なりに試してみた内容
irb> s = "I slit the sheet, the sheet I slit, and on the slitted sheet I sit."
=> "I slit the sheet, the sheet I slit, and on the slitted sheet I sit."
irb> /sheet/.match(s).length
=> 1
irb> /sheet/.match(s)
=> #<MatchData:0x2c28d30>
irb> /sheet/.match(s).class
=> MatchData
irb> /sheet/.match(s).to_a
=> ["sheet"]
irb> /sheet/.match(s).offset(0)
=> [11, 16]
■疑問
・match(s).lengthの答えが、どうして1になるか分からない。
・説明の中の「正規表現/sheet/にマッチした全体の文字列」とは何を指すのか?
・説明の中の「マッチした部分文字列の配列」が何を意味しているか?
・返ってきたMatchData オブジェクトの中身は何? [11, 16]だけってこと?
一応、リファレンスも覗いてみたのですが、そこに掲載されていた内容もよく理解できませんでした。
http://www.ruby-lang.org/ja/man/html/Regexp.html#match
bar = /foo(.*)baz/.match("foobarbaz").to_a[1]
foo, bar, baz = /(foo)(bar)(baz)/.match("foobarbaz").to_a.values_at(1,2,3)
さらに、そこに掲載されていた「正規表現にマッチした部分文字列だけが必要な場合に」
ってのは、どういう意味なのでしょうか。
補足
早速ありがとうございます! すみません、phpなんです。 それで掲示板のようなスクリプトで、書き込まれた文字列の中にあらかじめこちらできめた三つの文字列のうち一つでも含まれていたら書き込め、一つも含まれてなかったらエラーになるという動作にしたいんです。 わかりにくい書き方ですみません。