常識なのかもしれないが、コーディングしていて改めて気がついたのでメモ。
文字列の数字表現で”1234.56″といった感じのものを読んで整数なのか小数なのかをチェックする場合、マッチさせたいパターンは詳細なものから書く。
例えば以下のように書くと
c = "12345.67" if c =~ /d/ puts c + "は整数です" elsif c =~ /d+.d+/ puts c + "は小数です" end
全て整数として判断される。
このような場合は正規表現のより詳細なものから先に書いておく必要がある。
c = "12345.67" if c =~ /d+.d+/ puts c + "は小数です" elsif c =~ /d/ puts c + "は整数です" end
こうすれば小数は小数としてマッチするようになる。
もっとスマートなやり方があればコメントしていただきたい。
2008年の記事にコメントしても詮無きことだが、はてブで見つけたので。
その条件だと整数や小数を「含む」文字列にマッチする。つまり、”123abc”が整数と判定される。
http://ideone.com/mfv2IA
/^\d+$/ のように、^(行頭)、$(行末)を入れれば良い(誤判定もなくなる)。
複数行のテキストの場合、代わりに\A(文字列の先頭)、\Z(文字列の末尾)を指定する。