プロが教えるわが家の防犯対策術!

perlでパターンマッチを行う際、正規表現で行いますが、パターン文字列内に変数を指定したい場合はどうすればよいのでしょうか?

if ($ENV{HTTP_USER_AGENT} =~ /$pattern/) {
 :
}

というようなことをしたいのですが、うまくいきません。
方法はありますでしょうか?

A 回答 (3件)

$dat = 'abcdefg';


$pattern = 'cde';

if($dat =~ /$pattern/){ print "01\n";}
if($dat =~ $pattern){ print "02\n";}

結果
01
02

普通にマッチしますよ。
$patternの内容に問題あるのでは?
内容を再度確認してみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
pattern文字列に改行コードが末尾に付いていたためにマッチしなかっただけでした。
お騒がせいたしました。

お礼日時:2007/01/23 13:29

trならともかく、m///やs///では


パターンが正しければ、その書き方で良いハズですね。

一度$patternをprintしてみるのが良いと思います。

HTTP_USER_AGENTという事は、"/\d\.\d"なんてありそうですし、
メタ文字が気になりますね。
ただし、\Qはpatternの内容によってはマズイと思います。
'\d\.\d'が'\\d\\.\\d'になったり・・・。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
pattern文字列に改行コードが末尾に付いていたためにマッチしなかっただけでした。
お騒がせいたしました。

お礼日時:2007/01/23 13:29

=~ /\Q$aaa/


のように
頭に\Qを付けてクォートしなければいけなかったと思います。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。
pattern文字列に改行コードが末尾に付いていたためにマッチしなかっただけでした。
お騒がせいたしました。

お礼日時:2007/01/23 13:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!