※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

目次

rubyユーザーズガイドでのお勉強1


以下は以前作った覚書です。内容は本文が非常に分かりやすくておすすめです。

sampleソースの再現性とirbの仕様

色が出ないのはzaurusの仕様か?terminalではどうか?
bash-2.05$ ruby -S re_test.rb
str> foobar
pat> ^fo+
foobar
eval.rbも動作が再現しない
bash-2.05$ ruby eval.rb
のでirbをトライ
bash-2.05$ irb
irb(main):001:0> print "111!"
irbではSTDOUT=>返り値の表示となる。
111!=> nil
文字列は""でくくられて表示される←返り値だから
irb(main):002:0> "print '111'"
=> "print '111'
rubyは処理結果が返り値となる
irb(main):003:0> 111
=> 111
irb(main):004:0> 1+2
=> 3

文字列操作

ダブルクォーテーションとシングルクォーテーションの違い
irb(main):005:0> "\n"
=> "\n"
irb(main):006:0> '\n'
=> "\\n"
エスケープを展開するのがダブルクォーテーション
文字列は加算、乗算ができる
irb(main):007:0> "foo"+"bar"
=> "foobar"
irb(main):011:0> word = "fo"+"o"
=> "foo"
irb(main):012:0> word = word*2
=> "foofoo"
#{}で文字列内の式評価
irb(main):008:0> "abc #{5+3}cde"
=> "abc 8cde"
irb(main):009:0> var = "abc"
=> "abc"
irb(main):010:0> "123#{var}456"
=> "123abc456"
文字列の制御。文字は配列に展開される
irb(main):013:0> word[0]
=> 102
配列の中身は、アスキーコード
irb(main):014:0> word[1]
=> 111
文字列の部分取り出し
irb(main):015:0> word[0,1]
=> "f"
第1引数は位置(0〜)、第2引数は文字数
irb(main):016:0> word[-2,2]
=> "oo"
文字列の比較
irb(main):017:0> "foo"=="foo"
=> true
irb(main):018:0> "foo"=="bar"
=> false
等号評価式は"=="。小文字のtrue・falseはv1.1以降で採用

正規表現

マッチ評価
irb(main):004:0> /fo+/=~"foober"
=> 0
irb(main):005:0> $&
=> "foo"   
正規表現は/正規表現/で表され、re=~文字列 で評価する
評価の戻り値は、マッチした先頭位置を示す
irb(main):006:0> /fo+/=~"berfoober"
=> 3
マッチ文字列は$&に格納される
irb(main):007:0> $&
=> "foo" 
正規表現は1文字の評価
irb(main):023:0> /\d/=~"abc12dbcd555"
=> 3
irb(main):024:0> $&
=> "1"	
複数文字列の評価は+や*を組み合わせる
irb(main):010:0> /\d+/=~"abc123def456gh"
=> 3
irb(main):011:0> $&
=> "123"
格納されるのは、最初にマッチした文字列
irb(main):031:0> /.bc/=~"abc12dbcd555"
=> 0
irb(main):032:0> $&
=> "abc"
gsub!は文字列のマッチ部分の文字を置き換える。文字列.gsub! re,"置き換え文字列"
irb(main):033:0> "abc012dbcd555".gsub! /\d/,"*"
=> "abc***dbcd***"
マッチ箇所は6箇所
irb(main):034:0> "abc012dbcd555".gsub! /.bc/,"*"
=> "*012*d555"
又はの表記"|"
irb(main):036:0> "abc012dbcd555".gsub! /bc|db/,"*"
=> "a*012*cd555"
数字以外\D
irb(main):037:0> "abc012dbcd555".gsub! /\D/,"*"
=> "***012****555"
代替え文字に空文字を送るとマッチの切り取りとなる
irb(main):038:0> "abc012dbcd555".gsub! /\D/,""
=> "012555"
文字列の整数化.to_i
irb(main):040:0> ("abc012dbcd555".gsub! /\D/,"").to_i
=> 12555
irb(main):041:0> ("bc0124dna-a".gsub! /\D/,"").to_i
=> 124
irb(main):042:0> ("bc0124dna-a".gsub! /\D/,"")
=> "0124"
英数以外\W
irb(main):043:0> ("bc0124dna-a".gsub! /\W/,"")
=> "bc0124dnaa"
文字範囲は[]でくくり-でつなげるか,で列記する
irb(main):044:0> ("bc0124dna-a".gsub! /a..z/,"")
=> nil
irb(main):045:0> ("bc0124dna-a".gsub! /(a..z)/,"")
=> nil
irb(main):046:0> ("bc0124dna-a".gsub! /[a..z]/,"")
=> "bc0124dn-"
irb(main):047:0> ("bc0124dna-a".gsub! /[a-z]/,"")
=> "0124-"
irb(main):048:0> ("bc0124dna-a".gsub! /[a-z,-]/,"")
=> "0124"