http://www.sw.it.aoyama.ac.jp/2011/PB2/lecture13.html
© 2011-12 Martin J. Dürst 青山学院大学
1月19日 (木曜日3限、補講): 14回目の授業 (補講についての注意)
期末試験: 1月23日 (3限、13:10-14:10)
期末試験の内容:
過去問: 2010年度
injectgroup_by提出: 12月23日 (金曜日) 22:00 までに Moodle に
famous_stats.rb のファイル名で投稿
有名人のデータから次の統計を計算し、出力しなさい。
注意: 肥満度ごとにプログラムをコピペしないで、イテレータを使う
ヒント:
group_by で肥満度ごとに分割inject で体重などの合計を計算発展問題: 平均を計算できる関数を作って使う
正解例: famous_stats.rb
これから自分が書きたいプログラムの概要・応用を文書 (.txt ファイル) で説明しなさい。
条件:
授業全体の内容を復習し、分からない部分をリストアップ
(regular expression)
if height_text =~ /^[0-9]+(cm)?$/height_text に一つ以上の数字の後に cm
が含まれている場合text.gsub /[Pp](erl|ython|HP)/, 'Ruby'text 内の
Perl、Python、PHP を全て
Ruby に置き換える/.../ で、/
に挟む/.../
の後オプションとして文字が来る可能性がある/.../i
で大文字・小文字の差を無視)., |, +,
*, ?, (, ),
[, ], {, },
^, $, -, \\ を付ける/[0-9]+\.[0-9]+/ 小数点数で、小数点は
. は特殊文字なので \ を使用)^:
文字列の先頭だけでマッチを試みる$:
文字列の終わりだけでマッチを試みる/^[0-9]+(cm)?$/^ と $
がなかったら他に変なものがないか感知できない)/Ruby/ は文書内に Ruby の文字列を感知)\ を付ける. は一文字にマッチ (どの文字でも良い)[abc] は []
内のいずれかの文字 (この場合、a、b 又は c)
だったらマッチ[Pp] 大文字又は小文字の P)[0-9]
はその間の全ての文字にもマッチ (例は
[0123456789] と同じ)[a-z] は半角小文字、[A-Z]
は半角大文字)[...]
で表されているものは文字クラスと呼ぶ+ では一回以上マッチ/^R+$/ は
'R'、'RR'、'RRR'、'RRRR'
などにマッチ)* では 0 回以上マッチ/^R*$/ は
''、'R'、'RR'、'RRR'、'RRRR'
などにマッチ)? では 0 回又は 1 回マッチ/^R?$/ は '' と 'R'
にマッチ)() で囲まれた正規表現の部分=~ でチェック/Ruby/ =~ 'Hello Ruby!' → 6)nil/Ruby/ =~ 'Hello World!' → nil)正規表現 =~ 文字列 も
文字列 =~ 正規表現 も同じ!~ は not ... =~ ...
と同じ/Ruby/.match('Hello Ruby!')MatchData クラスのインスタンス
文字列.sub(正規表現,
置き換え文字列)文字列.gsub(正規表現,
置き換え文字列)g は
global の意味)次の文を irb
に入れ、正規表現とその使い方を試してみてください。
/abc/.class/ruby/ =~ 'ruby'/^ruby$/ =~ 'ruby'/ruby/ =~ 'Ruby'/ruby/ =~ 'Hello, ruby is great!'/^ruby/ =~ 'Hello, ruby is great!'/ruby/ =~ 'Hello, Ruby is great!'/ruby/i =~ 'Hello, Ruby is great!'/[Rr]uby/ =~ 'Hello, Ruby is great!''Perl and Python are great!'.sub /[Pp](erl|ython|HP)/,
'Ruby''Perl and Python are great!'.gsub /[Pp](erl|ython|HP)/,
'Ruby'ヒント: irb 内にカーソルキー(←↑→↓)
を使って、長い例を全部再入力しないようにする
次の正規表現のマッチする文字列とマッチしない文字列を
irb を使って見つけなさい。
/^Hello$//^Hel+o$//^Hel*o$//^Hell+o$//^Hell?o$//^He(ll)+o$//^He(ll)+o$//^He(l+o)+$/他にもいろいろ試してみてください。
提出: 1月18日 (水曜日) 22:00 までに Moodle に
famous_regexp.rb のファイル名で投稿
有名人のデータから正規表現を使って特殊な有名人を探し出してください。例:
その他や複数のものも可能。何を出力するのか出力に明記しなさい。