WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:正規表現について(Perl)

0:[投稿] ぴょんきち [2004/04/19 14:33 ][環境:Windows2000、IE6.0 Turbo-Linux、CGI、Perl5.6.1、Apache1.3.26]

こんにちは。
以前、暗号化に関して、こちらの掲示板でお世話になったぴょんきちです。
今回は、正規表現の内容に関してお力添えを頂きたく、投稿させて頂きました。

例えば下記のように、$dateという変数に、今日の日付をyyyymmdd形式で格納します。
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isddt) = localtime();
my $date = sprintf("%04d%02d%02d",$year+1900,$mon+1,$mday);
そうしますと、$dateには今日であれば、「20040419」のような値が入ります。
例えば、CSVファイルの名称が格納されている$csvという変数に、
この$dateの内容が含まれているかどうかを正規表現で書く場合、
if($csv =~ /\$date/){
   …行いたい処理…
}
といった書き方はできるのでしょうか?
また逆に、これだと$dateという文字列が含まれているかどうかになってしまうのでしょうか?
(またそういった場合、$csvのN文字目からM文字目までが、$dateであればといったような書き方は可能でしょうか?)
自分の環境でできればいいのですが、試すといっても、今日の日付が変わる時間ではないと出来ませんので…。
この件に関して、ご存知の方がいましたら、ご教授願えませんでしょうか?

以上、よろしくお願い致します。


1:[回答] ふじ [2004/04/19 15:42 ]

> if($csv =~ /\$date/){
>   …行いたい処理…
>}
>といった書き方はできるのでしょうか?
これだと $ が \ によってエスケープされてしまうので、
「$date という文字列が含まれているかどうか」になります。

$dateの中身でマッチさせたいのであれば素直に
$csv =~ /$date/
でいいです。

>$csvのN文字目からM文字目までが、$dateであれば
$csv =~ /^.{$n}$date/;
とか。
substr で N文字目からM文字目まで切り出して eq で比較するとか。

ところで、もしお仕事でやられているのでしたら
(負荷テストをするぐらいだから素人ではないと思いますが)
手元の環境で小さいコードのチェックすらできない状況では効率が悪すぎると思います。
Perl が動く環境が手元にないと、何か疑問があるたびに
ここに質問を出す、ということになってしまいますし。
# 余計なお世話だったらすみません。


2:[完了] ぴょんきち [2004/04/19 17:33 ]

ふじさま

ご回答ありがとうございます。
substrですね。思いつかなかった…。
(さすがペーペーの自分…)
それと正規表現で変数を用いる場合は、
そのままでよかったのですね。
$記号を用いているので、マズイのかなと思っていました。

それと環境ですが、perl実行環境はあります。
ただ、$dateに入っているのは日付なので、実際夜中になって
日付が変わってみないと、上手く行ったかどうかは分からないという意味です。
日付はサーバーマシン(Turbo-Linux)からlocaltime関数で取って来て、$dateに格納します。
(ふじさまがおっしゃっているのは、そういうことじゃないですかね?違いますか(^_^;)?)

ありがとうございました!!


3:[完了] B-Cus [2004/04/19 17:49 ]

> ただ、$dateに入っているのは日付なので、実際夜中になって
> 日付が変わってみないと、上手く行ったかどうかは分からないという意味です。
わたしにとっては新鮮な視点で感銘を受けましたが、そういう
悠長なやり方ではいつまでたってもプログラムは完成しません。

あなたが知りたいのは「日付が変わったら云々」ではなく、
「文字列マッチの基本的な書き方」です。よって、以下の
ようなコードで検証すればよいでしょう。

$date='20040419';
$csv='a,b,c,20040419,d,e,f';
if($csv =~ /\$date/){
  print "OK\n";
} else {
  print "NG\n";
}


4:[完了] ぴょんきち [2004/04/19 18:04 ]

B-Cusさま

ご回答ありがとうございます。
何だかぴょんきちの説明がわかりづらくて、
皆様に色々な懸念を抱かせてしまい、申し訳ありません。
B-Cusさま、テスト方法を表記していただき、有難うござます。

失礼します。


5:[完了] みかん [2004/04/20 22:12 ]

終わっているスレッドにレス付けてもしょうがないんだけど。

簡単に諦めちゃダメだよ。
レスしてくれた人の労力が無駄になるでしょ?

文章でうまく伝えられないならそれなりの伝え方の勉強を
ここでやればいいだけでしょう。次回からまともに質問す
るように心がければよいことだし。ちょっときつい書き方
されたくらいで投げるのは愚の骨頂だよ。きつい言い方も
真摯に受け止めて反省する姿勢が大事だと思うね。
この人はきっとぴょんきち改め「???」で名前変えて
再投稿するんだろうけどさ。どこぞの自分を分かってくれる
掲示板で。


回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World