Rubyの正規表現で数字の1~10を表す


このエントリーをはてなブックマークに追加

CodeIQのてぃーびーさんからの問題
shoheyコマンド
をやってみたところ正規表現で少しつまずいたのでメモ

詳しい問題の内容は上記ページを参照なのですが
どうやら正規表現で数字の 1~10 のみを取り出す必要があるみたいです

Rubyの正規表現で数字の1~10

意外と情報が出てこなかったのでメモ
参考
http://d.hatena.ne.jp/seuzo/20080514/1210756204

結論から書くと

1
number =~ /(?<![\.,])\b[1-9]\b(?![\.,])|\A10\Z/

とすれば、numberが1~10の数字の時にマッチしてくれる(はず)

(?<!) は正規表現の「否定後よみ」
(?!)は正規表現の「否定先読み」
\bで単語の境界(今回の場合、数字の前後)を調べる

つまり、数字の前後に余分なもの(小数だとコンマが入るとか、カンマ区切りの数字だったとか)
を排除しつつ
1から9の数字の境界とマッチする(つまり数字が2桁以上だと、境界が無くなってしまうのでマッチしなくなる結果数字一桁が得られる)

プログラマと呼ぶにはまだまだな実力ですが問題も解けました
ここに載せるのははばかられるのでひとまず置いておいて

内容としては有名なFizzBuzz問題のように条件分岐させることで無事クリアできた良かった


このエントリーをはてなブックマークに追加