http://www.sw.it.aoyama.ac.jp/2010/PB2/lecture13.html
© 2011 Martin J. Dürst 青山学院大学
14回目の授業: 1月18日 (火曜日) 3時限 (補講)
期末試験: 1月24日 (13:10-14:10)
期末試験の内容:
injectgroup_by提出: 12月24日 (金曜日) 22:00 までに Moodle に
famous_stats.rb のファイル名で投稿
有名人のデータから次の統計を計算し、出力しなさい。
注意: 肥満度ごとにプログラムをコピペするのではなく、繰り返し (イテレータ) を使う
発展問題: 平均を計算できる関数を作って使う
正解例: 都合により削除
これから自分が書きたいプログラムの概要・応用を文書 (.txt ファイル) で説明しなさい。
条件:
授業全体の内容を復習し、分からない部分をリストアップ
(regular expression)
if height_text !~ /^[0-9]+(cm)?$/hight_text に一つ以上の数字の後に
cm が含まれてない場合text = 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 ... =~ ...
と同じ文字列.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 のファイル名で投稿
有名人のデータから正規表現を使って特殊な有名人を探し出してください。例:
その他や複数のものも可能。何を出力するのか出力に明記しなさい。