• ベストアンサー

正規表現のパターンに変数を指定したい

perlでパターンマッチを行う際、正規表現で行いますが、パターン文字列内に変数を指定したい場合はどうすればよいのでしょうか? if ($ENV{HTTP_USER_AGENT} =~ /$pattern/) {  : } というようなことをしたいのですが、うまくいきません。 方法はありますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.2

$dat = 'abcdefg'; $pattern = 'cde'; if($dat =~ /$pattern/){ print "01\n";} if($dat =~ $pattern){ print "02\n";} 結果 01 02 普通にマッチしますよ。 $patternの内容に問題あるのでは? 内容を再度確認してみてください。

babbo
質問者

お礼

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

その他の回答 (2)

  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.3

trならともかく、m///やs///では パターンが正しければ、その書き方で良いハズですね。 一度$patternをprintしてみるのが良いと思います。 HTTP_USER_AGENTという事は、"/\d\.\d"なんてありそうですし、 メタ文字が気になりますね。 ただし、\Qはpatternの内容によってはマズイと思います。 '\d\.\d'が'\\d\\.\\d'になったり・・・。

babbo
質問者

お礼

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

  • stiffels
  • ベストアンサー率34% (25/72)
回答No.1

=~ /\Q$aaa/ のように 頭に\Qを付けてクォートしなければいけなかったと思います。

babbo
質問者

お礼

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