
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 …
bar = /foo(.*)baz/.match("foobarbaz").to_a[1]
foo, bar, baz = /(foo)(bar)(baz)/.match("foobarbaz").to_a.values_at(1,2,3)
さらに、そこに掲載されていた「正規表現にマッチした部分文字列だけが必要な場合に」
ってのは、どういう意味なのでしょうか。
No.2ベストアンサー
- 回答日時:
>・説明の中の「正規表現/sheet/にマッチした全体の文字列」とは何を指すのか?
/sheet/にマッチする文字列は "sheet" です。
>・説明の中の「マッチした部分文字列の配列」が何を意味しているか?
部分文字列とは、カッコに囲まれた正規表現の一部分にマッチする文字列のことですが、/sheet/ にはカッコがないので部分文字列はありません。
>・match(s).lengthの答えが、どうして1になるか分からない。
マッチした文字列が1個で、部分文字列が0個なので全体で1個。
>・返ってきたMatchData オブジェクトの中身は何?
マッチした結果の様々な情報。 [11, 16]もその1つです。
アドバイスとしては、学校の受験勉強じゃないので、問題集と参考書で勉強するのは無理です。
「Ruby認定試験対策問題」はRubyでプログラミングを出来る人が、その技術レベルを認定してもらうための試験なので、まずはプログラミングをしてみましょう。
No.1
- 回答日時:
>・match(s).lengthの答えが、どうして1になるか分からない。
リファレンスに MatchData#length は self.to_a.size と同じだとあります。
そこで MatchData#length.to_a の説明を読むと "$&, $1, $2, ... " を格納した配列とあります。
次に $& の説明を読むと「最後に成功した正規表現のパターンマッチでマッチした文字列」とあります。
今回のケースでは正規表現に () によるグループ化が含まれていないので、マッチする部分文字列はありません。
単純にマッチした文字列 $& だけが得られます。
/(shee)t/.match(s)
とすれば、$& が sheet、$1 が部分文字列 shee になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSSのhtmlへの紐付けについ...
-
100万件越えCSVから条件を満た...
-
一週間用のカレンダー
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
ルビー言語 csvファイル 続き(...
-
ルビー言語 csvファイル 続き
-
ルビー言語 ライブラリー
-
ルビー言語 csvファイル part2
-
ルビー言語 ライブラリー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
CSSのhtmlへの紐付けについ...
-
(再質問)エクセルのマクロボ...
-
パソコンのスクリーンセーバー...
-
教えてください
-
ビーリアルのユーザー名を変え...
-
ruby while式
-
ruby loopメソッド 変数
-
英数字を含む文字列(0-9,A-Z)...
-
Ruby newメソッド
-
100万件越えCSVから条件を満た...
-
C言語の入力した文字を反転させ...
-
pandasでsqlite3にテーブル作成...
-
ruby loopメソッド 変数(再喝)
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
Beautiful Soupのインストール...
-
<python>ノイズを時間指定して...
-
Ruby require ライブラリー
-
あせんうぶり言語
おすすめ情報