みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

perlにおける正規表現で、パターンに変数を使う場合について教えてください。

変数と変数を正規表現にて比較する場合に、

if ($text =~ /$pattern/) { ... }
とすると、「$pattern」を変数として認識しません。
「$」が位置指定子として認識されている?ようです。

「$pattern」を変数として認識させるにはどのようにすればよいのでしょうか?
「\$pattern」のように「\(バックスラッシュ)」を入れても認識されませんでした。

投稿日時 - 2006-12-11 22:43:59

QNo.2595203

すぐに回答ほしいです

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

裏技っぽいんですが,
if ($text =~ $pattern) { ... }
でよかったりして. あとで見たときに困りそうですが.

投稿日時 - 2006-12-12 00:32:25

補足

お礼と補足が逆になってしまいましたが、
if ($text =~ $pattern) { ... }でいけました!

本当にありがとうございます!

補足としては$patternがファイルから読み込んだ文字列であり、
改行コードが含まれていたため比較してもひっかからなかったというのもありました。
($patternに文字列を入れた後、改行コードを削除したら大丈夫でした。)

投稿日時 - 2006-12-12 09:45:18

お礼

回答ありがとうございます。
もう疲れ果てて家に帰ってきてしまいました(笑)

明日出勤したら早速ためしてみます!

投稿日時 - 2006-12-12 01:37:59

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>「$pattern」を変数として認識させるにはどのようにすればよいのでしょうか?

if ($text =~ /$pattern/) { ... }
で大丈夫ですよ。

ただし、$pattern に「\」などの記号を入れる場合は、注意が必要です。例えば、
if ($text =~ /\s+/) { ... }
としたい場合は、
$pattern = "\\s+"; # \が2つ必要
if ($text =~ /$pattern/) { ... }
としなければなりません。

上の問題ではないときは、うまくいかない$textと$patternの情報を提示いただければ、何かわかるかもしれません。

投稿日時 - 2006-12-11 23:26:36

補足

回答ありがとうございます。
上下いれかわってますが・・・

$patternがファイルから読み込んだ文字列であり、
改行コードが含まれていたため比較してもひっかからなかったようです。

さらにTacosanの //を使わない業を使用したら$patternが文字列として認識されました。

投稿日時 - 2006-12-12 09:46:45

お礼

回答ありがとうございます。

すみません。もう自宅に帰ってきてしまったので、
詳細の情報はすぐには書けませんが、
あるテキストファイルから1行ずつ読み込み、
$patternに格納した後、それが$text内に含まれるかをチェックしようとしています。
($patternに格納するものには「\」などのエスケープが必要な文字はありません)

EOFまで読み込むため、ループにて制御し、
変数による比較を行わなければならないのですが、
変数を使う>$を頭につける>認識しない!という感じだと思っているのですが、他に理由などあるのでしょうか。

少ない情報で申し訳ありません。

投稿日時 - 2006-12-12 01:42:54

あなたにオススメの質問