- ベストアンサー
パターンマッチについて
perl初心者です。文字列がパターンマッチするかを検査したいのですが、検査文字列にカッコ"()"が含まれているので期待する結果を得られません。(マッチしているように見えるが実行結果はマッチしていないになる)カッコによりパターンがグループ化されているように思えるのですが。原因と対処をご教示ください。 $word = "Remote Procedure Call (RPC)" $chk_word = "Remote Procedure Call (RPC)" if ($word =~ m/$chk_word/ ) {・・・・ よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
use strict; my $word = "Remote Procedure Call (RPC)"; my $chk_word = "Remote Procedure Call (RPC)"; # $chk_wordの中の()は、 # パターンマッチでは意味のある文字なので、 # エスケープしてマッチングします。 if ($word =~ /\Q$chk_word\E/ ) { print "match"; } else { print "unmatch"; } # 一度、Perlの本を手にとってみることをお勧めします。
その他の回答 (1)
- saintandre
- ベストアンサー率31% (194/607)
括弧をエスケープシークエンス(\)でエスケープさせれば大丈夫です。 $word = "Remote Procedure Call (RPC)" $chk_word = "Remote Procedure Call \(RPC\)" if ($word =~ m/$chk_word/ ) {・・・ 原因はあなたの考えている通りですね。
補足
早速のご回答ありがとうございます。 エスケープシーケンスを入れてみましたが意図したように 動きませんでした(以下のコーディングで実行すると"unmatch"になる)。勝手を申し上げ恐縮ですがコーディング上おかしな点などありましたらご指摘いただければと思います。 $word="Remote Procedure Call (RPC)"; $chk_word="Remote Procedure Call \(RPC\)"; if ($word =~ m/$chk_word/){ print "match"; } else {print "unmatch"} よろしくお願いします。
お礼
ありがとうございます、解決しました。 しっかり勉強することとします。