日付や時間を正規表現で検索したい

いまさらながらに正規表現を勉強したのでまとめてみた。

なお、サンプル作製にあたり、以下のサイトを参考にした。

といっても、トライアンドエラーの試行錯誤が必要だったけど・・・・

正規表現サンプル集

http://hodade.adam.ne.jp/seiki/

PHP 基礎編9 – 正規表現、マッチ、置き換え、ereg、eregi、eregi_replace – SAK Streets

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k09.htm

カッコに囲まれた値の検索(すべての文字)

\(.+?\)

検索結果:
○ (1234)
○ (abcd)
○ ( 1234 )
○ ( 12 34 )
○ ( abcd )
○ ( ああああ )

カッコに囲まれた値の検索(半角数字)

\(\d+?\)

検索結果:
○ (1234)
× (abcd)
× ( 1234 )
× ( 12 34 )
× ( abcd )
× ( ああああ )

カッコに囲まれた値の検索(半角数字のみ+スペース含む)

\([\s\d]+?\)

検索結果:
○ (1234)
× (abcd)
○ ( 1234 )
○ ( 12 34 )
× ( abcd )
× ( ああああ )

日付の検索

\d{4}[-/._]\d{1,2}[-/._]\d{1,2}

検索結果:
○ 2011/01/01 
○ 2011/1/1 
× 2011 / 01 / 01 
× 2011 / 1 / 1 
○ 2011-01-01
○ 2011-1-1 
× 2011 - 01 - 01 
× 2011 - 1 - 1 
○ 2011.01.01 
○ 2011.1.1 
× 2011 . 01 . 01 
× 2011 . 1 . 1 
○ 2011_01_01 
○ 2011_1_1 
× 2011 _ 01 _ 01 
× 2011 _ 1 _ 1 
× 2011//01/01 
× 2011--01-01
× 2011..01.01 
× 11/01/01 

時間の検索(欠点あり)

[\s]([0-9]|[0-1][0-9]|[2][0-3])(:|-|\.)([0-9]|[0-5][0-9])(:|-|\.)([0-9]|[0-5][0-9])[\s]

※時間文字列の前に空白スペースが入ってしまう。

検索結果:
○ 2011/01/01 11:11:11
○ 2011-01-01 11-11-11
○ 2011.01.01 11.11.11
× 2011/01/01 11 11 11
○ 2011/01/01 21:11:11
× 2011/01/01 25:11:11
○ 2011/01/01 01:01:01
○ 2011/01/01 0:0:0
○ 2011/01/01 1:1:7
○ 2011/01/01 1:1:7 ←最終文字が半角空白
× 2011/01/01 1:1:70
○ 2011/01/01 23:59:59
○ 2011/01/01 00:00:00

時間の検索(欠点あり)

\d{1,2}?(:|-|\.)\d{1,2}(:|-|\.)\d{1,2}

※「△」の文字列は日付部分もマッチしてしまう。

検索結果:
○ 2011/01/01 11:11:11
△ 2011-01-01 11-11-11
△ 2011.01.01 11.11.11
× 2011/01/01 11 11 11
○ 2011/01/01 21:11:11
○ 2011/01/01 25:11:11
○ 2011/01/01 01:01:01
○ 2011/01/01 0:0:0
○ 2011/01/01 1:1:7
○ 2011/01/01 1:1:7 ←最終文字が半角空白
○ 2011/01/01 1:1:70
○ 2011/01/01 23:59:59
○ 2011/01/01 00:00:00