ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

超初心者向けCGI講座コミュの[質問]正規表現 決まった位置の文字の抽出

  • mixiチェック
  • このエントリーをはてなブックマークに追加
先日は、正規表現を使った文字列の置換について、いろいろとアドバイスありがとうございました。

今回は、またまた正規表現で質問がございます。m(__)m

やりたい事:
掲示板のログファイル内で「2007/02/17(Sat) 19:23」という書式で記録されてしまっている投稿日時情報から、年月日時分のデータを個別に取り出したい。
(最終的には、データを取得した後、シリアルな日時に変換し、本日から3日以内の日時であれば、Newマークをつける・・というような事をしたいと思っております。)

具体的には、生ログから取り出した

$date = '2007/02/17(Sat) 19:23';

から、結果として

$year='2007';
$month='02';
$day='17';
$hour='19';
$min='23';

となるように、文字列を抽出したいと思っております。

この場合、たとえば、$yearを「$dateの左から1〜4桁目」などという抽出方法ができるのでしょうか?
その場合、どのように記述するのでしょうか?
他にも、オススメの抽出方法がありましたら、教えていただけますか?

宜しくお願いいたします。

コメント(4)

こんばんは。

いろいろなやり方があると思いますが、ジェミーさんご自身はどの程度調べられていて、どのように処理しようと思っていますか?
Keiさん、皆さま。

大変失礼いたしました。

正規表現のところばかりみていたのですが、Substr関数の存在に先ほど気がつきました。(^^ゞ

以下で、解決できました。m(__)m

$year = substr($dat{$_},0,4);
$month = substr($dat{$_},5,2);
$day = substr($dat{$_},8,2);
$hour = substr($dat{$_},16,2);
$min = substr($dat{$_},19,2);

失礼しました。m(__)m
なるほど、Substrを使ったのですね。
一応、正規表現での処理例も掲載しておきますね。

# 数値の桁数は変化しないと仮定しています
$date = '2007/02/17(Sat) 19:23';
$date =~ /^(\d{4})\/(\d{2})\/(\d{2}).+(\d{2}):(\d{2})$/;
($year, $month, $day, $hour, $min) = ($1,$2,$3,$4,$5);

# シリアル値に戻す
# 秒はゼロと仮定しています
use Time::Local;
$time = timelocal(0, $min, $hour, $day, $month, $year);
Keiさん、正規表現での処理例を教えていただき、ありがとうございました。

Keiさんの書き込みによって、()を使ったグループパターンというものがある事、それを活用すれば綺麗にまとめて記述できる事がわかりました。大変勉強になりました。m(__)m

それから、シリアル値に戻す記述例についても、ありがとうございました。
実は、Substr関数の存在に気づいた後は、日時をシリアル値に戻すサブルーチンが含まれるCGIライブラリを下記より入手した事により、すでにスクリプトは完了しておりました。(72時間以内のものはNew!と表示させました。)

WEB POWERさん提供の「CGI標準入出力ライブラリ」
ttp://www.webpower.jp/websofts/others/libraries/stdio/

しかし、後からKeiさんの例示を拝見して、もっとシンプルに記述できたのかもしれない・・・と思いました。
こちらも勉強になりました。

ありがとうございました。m(__)m

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

超初心者向けCGI講座 更新情報

超初心者向けCGI講座のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング