###前提・実現したいこと
文章の中から正規表現を用いて日付、時間を検索して抽出したい。
日付や時間は様々な書き方であっても抽出したい。
例として
1.「明日は2017年1月29日です。現在の時刻は14:58です」
2.「明日は2017/01/29です、現在時刻は14時58分です」
このどちらの文章も正規表現で
2017年1月29日,14:58
2017/01/29,14時58分
がマッチするような正規表現を書きたい。
###発生している問題・エラーメッセージ
上手く正規表現が書けない。
###該当のソースコード
マッチさせたいパターンとそれに対するコードを書いていきます
$rawData = '上記の例文'; $datePts = [ '/^([0-9]{4})\年([0-9]{1,2})\月([0-9]{1,2})日/', //Y年m月d日 '/^([0-9]{4})\-([0-9]{1,2})\-([0-9]{1,2})/', //Y-m-d '/^([0-9]{4})\/([0-9]{1,2})\/([0-9]{1,2})/', //Y/m/d '/^([0-9]{1,2})\月([0-9]{1,2})日/', //m月 '/^([0-9]{1,2})\-([0-9]{1,2})/', //m-d ]; $timePts = [ '/(?:(2[0-3])|([0-1][0-9])):([0-5][0-9])/', //H:i '/(?:(2[0-3])|([0-1][0-9]))\時([0-5][0-9])\分/' //H時:i分 ]; foreach ($datePts as $pts) { preg_match($pts, $rawData, $date); } foreach ($timePts as $pts) { preg_match($pts, $rawData, $time); }
正規表現の書き方が悪いのだと思いますが例文で実行すると1の例文ですとデータは何も取得できず、2の例文ですと時間だけ取得出来るのですが、サブマッチで空白のサブマッチが取得出来てしまいます。
正しく正規表現で文字を抽出出来るように。正しい正規表現の書き方を教えて頂けないでしょうか?よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/13 09:31