西暦年月日を表すには様々な書式がある―― 「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桁以下の数字になるので、これを用いた。
- $
- 文字列の終端を表す。
この正規表現を使ったサンプル・プログラムを次のページに掲載する。
(この項つづく)
| 2007年01月08日更新 | ||
| <<前へ | <目次> | 次へ>> |
| 戻る | 【関連ページ】 | |