• ベストアンサー

パターンマッチについて

perl初心者です。文字列がパターンマッチするかを検査したいのですが、検査文字列にカッコ"()"が含まれているので期待する結果を得られません。(マッチしているように見えるが実行結果はマッチしていないになる)カッコによりパターンがグループ化されているように思えるのですが。原因と対処をご教示ください。 $word = "Remote Procedure Call (RPC)" $chk_word = "Remote Procedure Call (RPC)" if ($word =~ m/$chk_word/ ) {・・・・ よろしくお願いします。

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

  • ベストアンサー
  • okiyoshi
  • ベストアンサー率34% (11/32)
回答No.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の本を手にとってみることをお勧めします。

m871
質問者

お礼

ありがとうございます、解決しました。 しっかり勉強することとします。

その他の回答 (1)

回答No.1

括弧をエスケープシークエンス(\)でエスケープさせれば大丈夫です。 $word = "Remote Procedure Call (RPC)" $chk_word = "Remote Procedure Call \(RPC\)" if ($word =~ m/$chk_word/ ) {・・・ 原因はあなたの考えている通りですね。

m871
質問者

補足

早速のご回答ありがとうございます。 エスケープシーケンスを入れてみましたが意図したように 動きませんでした(以下のコーディングで実行すると"unmatch"になる)。勝手を申し上げ恐縮ですがコーディング上おかしな点などありましたらご指摘いただければと思います。 $word="Remote Procedure Call (RPC)"; $chk_word="Remote Procedure Call \(RPC\)"; if ($word =~ m/$chk_word/){ print "match"; } else {print "unmatch"} よろしくお願いします。

関連するQ&A

専門家に質問してみよう