header

正規表現で年月日を分解する

(1/3)

西暦年月日を表すには様々な書式がある―― 「2007/1/4」「2007-01-04」「2007年1月4日」‥‥ すべて西暦年月日を表している。 今回は、正規表現を使い、これら様々な日付表現から年・月・日を 分解する方法を紹介する。

日付の表現形式

月の名をアルファベットで表記する欧米方式や、和暦まで対応するのは大変なので、 ここでは、「年」「月」「日」の順で数字が並んでいる書式に限ることにする。 かならず年月日の3つ組でなければならない。数字は半角でも全角でも構わないが、漢数字は対応しない。 また、区切り文字は「/」「-」「.」「年」「月」「日」で、半角・全角ともに対応する。

これを正規表現で分解するには、

([0-90-9]{1,4})[\/\-\./−.年]{1}([0-90-9]{1,2})[\/\-\./−.月]{1}([0-90-9]{1,2})[\/\-\./−.日]?$

というパターンを用意する。順に説明していこう。

今回使った正規表現

?
直前1文字の0または1回の繰り返し。
ここでは、http, https の両方にマッチする。
[ ]
文字クラス。
この中に記述された文字の並びのうちの1文字を表す。
-
文字の範囲指定。
0-9 は半角数字に、0-9は全角数字にマッチする。
+
直線1文字の1回以上の繰り返し。
ここでは、文字クラス[...]に記述された文字、いずれかの1回以上の繰り返し――すなわち、URL 文字列にマッチすることになる。
( )
サブパターン。
マッチングだけであれば不要だが、置換を行うために、 マッチした部分文字列に番号を付けてやる必要がある。その場合にサブパターンを用いる。
{a,b}
直前文字の a 回以上 b 回以下の繰り返し。bは省略できる。
年は4桁以下、月と日は2桁以下の数字になるので、これを用いた。
$
文字列の終端を表す。

この正規表現を使ったサンプル・プログラムを次のページに掲載する。

(この項つづく)