オルタナティブ・ブログ > 吉政忠志のベンチャービジネス千里眼 >

IT業界でベンチャービジネスの支援をしている執筆者が日々の活動ログと感じたことを、徒然なるままに書き綴っていきます。

志茂吉建氏のRubyコラム『正規表現の美学』

»

Rails技術者認定試験運営委員会の吉政でございます。

私が企画したコラムの件です。Rails技術者認定試験運営委員会のオーナーでもあるヒューマンリソシアが志茂吉建氏のRubyコラム『正規表現の美学』を公開しています。

美しくこだわりを持ってプログラムを書くということで美学という言葉を使っていただいています。志茂様のこのコラムのタイトルもRubyの美学です。

プログラマーとして成長していくには重要なことだと私も思います。

興味がある方は以下をご参考ください。


###

Rubyを利用する上で正規表現は欠かせません。最近ではJavaなどにも正規表現ライブラリが提供されていますが、Rubyでは最初から正規表現 の機能が組み込まれており、文字列を色々と書こうするのに大変便利です。Rubyでの一般的な正規表現の利用方法は以下の通りです。

日付の解析例 (\d{4})-(\d{1,2})-(\d{1,2})

いきなり難しいと思われるかもしれませんが、なれればすぐに書くことができます。\dは数字をあらわします。{4}などは、前の正規表現の繰り返す 回数を刺します。つまり¥d{4}は数字を4回となります。同じく{1,2}は、1回〜2回の繰り返し、となりますので、\d{1,2}は数字1回〜2回 の繰り返しとなります。「()カッコ」でくくることによりグルーピングされ、前から順番に、$1、$2、と組み込み変数に代入されます。では実際に見てい きましょう。

irb(main):001:0> today=”2012-11-10″
=> “2012-11-10″
irb(main):002:0> today =~ /(\d{4})-(\d+)-(\d+)/
=> 0
irb(main):003:0> puts $1, $2, $3
2012
11
10
=> nil

=~は文字列に定義された演算子で右辺の正規表現とマッチするかどうかを判断します。正規表現にマッチすれば最初の文字の文字数を、マッチしなければnilを返します。正規表現にマッチしたものを確認したければ、組み込み変数で確認します。

プログラム的にはこれでもいいと思いますが、この連載の趣旨は美しく書くこと、シンプルに表現することなので、今回もシンプルに書いてみたいと思います。少し、上長ですが、一行でかけました。

/(\d{4})- (\d{1,2})-(\d{1,2})/.match(today).values_at(1..3)

文字列もオブジェクトというお話をしましたが、Rubyでは正規表現もオブジェクトになります。今回の場合は、 「/(\d{4})-(\d+)-(\d+)/」がオブジェクトです。次に、matchというメソッドで文字列を指定してマッチングを行います。その結果 は、MatchDataオブジェクトとして返されます。values_atメソッドで、何番目の結果が必要か指定することでマッチした内容が配列となりま す。

正規表現ももう少し工夫してみましょう。

(この続きは以下のコラム本文をご覧ください)
http://resocia.jp/column/337/

Comment(0)