2012年5月12日土曜日

ヴィータと正規表現の話

今回の記事は、PSVITA(プレイステーションヴィータ)と、正規表現の話について書かせて頂きたいと思います。

正規表現とは、文字列のパターンを記号で表したものです。
たとえば、\d+なら「一桁以上の数字」を意味するわけです。

仕事とかでプログラミングしていると「あれっ、この正規表現いいんだっけ? 不安かも」と思う事があって、ササッとチェックする自作アプリをヴィータ用に作りましたが、これが思った以上に大活躍。

そういうヴィータの近況報告ついでに、ちょっと正規表現についての記事を書きたいなぁと思ったのでした。

正規表現は、ハッキリ言って暗号みたいで苦手です。
わけがわからぬ。

しかし!! じゃあ、正規表現を使わないで文字列のチェックをするぞとなると、どうだろう。
プログラムのコードが異様な長さと工数になるのに、その割に「こんなに苦労してプログラムしたけど、本処理のロジックまだ組めてないよぅ・・・と予想外の部分で絶望感を食らう事になっちゃう事も・・・。

たとえば、日付と時間を取り扱うとして、そのフォーマットを日:時間:分:秒.1/100秒(各要素を省略する事も可能)として取り扱うと決めたとします。
操作者が本当にこのフォーマット通りに入力してくれたかな?とチェックするプログラムを組もうとすると、かなり大変っぽい。

でも、正規表現なら以下の書き方さえ覚えておけば一発で成否をチェックできるんで真剣に便利です。

^\d+(:\d+){0,3}(\.\d+)?$
その意味は・・・
意味は以下になっています。
^は先頭の意味

$は末尾の意味

\d+は1桁以上の数字

ちなみに桁数制限したい時はこう。\d{1,5}で1桁以上5桁以下の数字

\.はピリオド

?は、前にくっつく内容をあっても無くてもOKにしたい時に指定

その流れで行って、()?は、()の中があっても無くてもOK

という話の結果から、(:\d+)と書けば、:の後に1桁以上の数字が続くことを意味します・・・

{0,3}は、前にくっつく内容が、3回以内のくり返しであるという制限

そういうわけなので、(:\d+){0,3}は、:の後に1桁以上の数字が続くパターンが、3回以下である事

チェックしたい文字列と、パターンをヴィータに入力して「実行」ボタンを押すと、成否とどれがヒットしたか念のため教えてくれるように作ってあります。

1/100秒を意味するドットは一個のみ。オラオラオラーと多数打ち込まれても、正規表現パターンチェックは一発で返り討ちにしちゃうのです。

まぁ、正直、正規表現パターンは見たくないんですが、これが使えない言語とかでプログラムしなきゃならないってなると、「ゲェぇ~、ないのーーー!!やべぇーっ」ってなるのが正規表現なんですね。いや結構きついですよ。

あと、こういうチェッカがあると良いのは、正規表現は「これで完璧だぜ」とか思っても誤解してて通してはいけないパターンを通したり、通したいパターンを塞いでしまったり、そういう事がありがちなんですよね。

まぁ、チェッカーなら別にヴィータでなくとも良いかも知れないんですが、やっぱり好きなマシンを活用したいのでありました。

プログラムそのものは小さくとも、好きなゲームマシンで「公に」自作アプリがプログラミング出来る時代になったわけで、何度も書いていますが、時代が変わった事を感じて心から感動しますね。いい時代だー。