Code Tips‎ > ‎

マッチング正規表現サンプル集


対象:小数点数

例:3.1415
正規表現:[-+]?[0-9]+(\.[0-9]*)?

対象:IPアドレス

例:192.168.0.1
正規表現:(\d+)\.(\d+)\.(\d+)\.(\d+)
正規表現:(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})

対象:日付け

例:2011/07/21
正規表現:\d{4}/\d{2}/\d{2}
正規表現:\d\d\d\d/\d\d/\d\d

対象:時刻

例:23:08
正規表現:\d\d:\d\d
正規表現:\d{2}:\d{2}
正規表現:[0-9][0-9]:[0-9][0-9]
正規表現:[0-9]{2}:[0-9]{2}
正規表現:([0-1][0-9]|2[0-3]):[0-5][0-9]


日付けのマッチングは、月別に月末日を指定してチェックすることは(うるう年の判定を含め)可能です。しかし入力チェックを完全に正規表現だけで完結させなければならない制約でもない限り、簡易な内容で十分だと思っています。

例えばログ内の文字列検索などで、「yyyy/MM/dd」形式でありながら、実は日付け以外の意味をもつ文字列が混入することなどまずないでしょう。仮に混入するのであれば、「2011/01/15」等の正式に日付けと認められる文字列でも、実はその文字列が日付けかどうかは判断できないことになります。私はそんな考えがあるので、日付けや時刻の正規表現の場合にも、簡易なパターンを使うことが多いです。

対象:特定の拡張子のファイル

例:CSVファイルのみ
正規表現:.+.csv
正規表現:.+\.csv

例:CSVファイルとPDFファイル
正規表現:.+\.(csv|pdf)

例:拡張子htmlとhtmのファイル
正規表現:.+\.(html?)

拡張子の前の「.」は本来ならエスケープする必要があります。しかし私の場合は、拡張子ではなく「csv」で終るファイルなどまずないであろうという前提の元に、見易さを優先してあえてエスケープせずに記述することもあります。

対象:URLやEメールアドレス

例:URL
正規表現:https?:\/\/[a-zA-Z0-9-_.~\/?:&=%+#]+

例:Eメールアドレス
正規表現:[a-zA-Z0-9_\.\-]+@[A-Za-z0-9_\.\-]+


URLやEメールアドレスは、きちんとした仕様にマッチしたパターンを正式に作ろうと思ったらとても複雑になります。ケースバイケースではありますが、私は個人的に、ゆるっとした簡易なパターンを使用することをお勧めします。簡易なパターンを使用することによって読みやすくまたメンテナンス製の高いコードになります。

しかし上記のような簡易なパターンを使用すると「http://-_-」「a@a」「-@-」のよな、ありえない文字列もマッチするという問題も発生します。一方で、正規表現でいくらチェックをして正しい形式だと判断されたとしても、それがネットワーク上有効なURLやEメールアドレスかどうかは全く保障されないという問題もあります。私の考えとしては「正規表現での入力チェックは最小限にとどめ、後は使って判断する」で多くの場合は十分だと思います。