• ベストアンサー

パターンマッチについて

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

  • m871
  • お礼率50% (1/2)
  • Perl
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • C言語にパターンマッチってないの?

    パールのようなパターンマッチはできないのでしょうか? 例えば 「1万円で会計を終えました。」 という文字列の中に 「万」 という単語はあるかという処理はできないでしょうか?

  • パターンマッチで・・・

    正規表現で、例えば以下の文字列とパターンがあった場合 <top>book<bottom><top>radio<bottom><top>table<bottom> (…以下同じようなパターンが続く) パターン→<top>文字列<bottom> この文字列中のパターン数が未定という条件でマッチした文字列を順に配列に格納するにはどのようなコードにしたらよいのでしょうか? お手数ですがご教授お願いします。

    • ベストアンサー
    • PHP
  • 正規表現のパターンに変数を指定したい

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

    • ベストアンサー
    • Perl
  • VBScriptでの正規表現パターンマッチ

    ASPプログラムの中で 文字列のパターンマッチを正規表現で行ないたいと考えています。 英字と数字両方を組み合わせた文字列(英字と記号且つ数字)であることをチェックしたいのですが 以下のようなロジックでは、英字、数字どちらかだけの文字列もマッチしてしまうのではと思います。 ほかによい書き方はありますでしょうか? Dim strTEST TESTCHECK = 0 Dim objRE Set objRE = new RegExp objRE.pattern = "[_\-a-zA-Z0-9]" If (objRE.Test(strTEST) = True) Then Else TESTCHECK = 1 End If Set objRE = Nothing よろしくお願いいたします。

  • パターンマッチにおける「-」の扱い

    例えば以下のように記載するとエラーとなります。 if($::FORM{'body'} =~ /パターン/){ push(@error, '投稿できません'); } しかし、以下のように記載するときちんとパターンマッチします。 このふたつともエラーが出ておかしくないと思うのですが なぜ以下ならOKなのか教えてください!! @word=qw(パターン); foreach (@word) { if (index($::FORM{'body'},$_) >= 0) { push(@error, '投稿できません。'); } }

    • ベストアンサー
    • Perl
  • RPCって何ですか?

    Windows XPを使ってます。システム構成ユーティリティーのサービスのタグの中に含まれている項目にRemote Procedure Call(RPC) LocatorとRemote Procedure Callというものがあります。この項目だけ右隣(重要という名のコラムの中)に「はい」と言う文字が入っています。なぜこれだけが重要なのですかその他のものはすべてチェックをはずしてもよいということですか? ご存知の方がいらっしゃいましたらぜひ教えてください。 よろしくお願いします。

  • 漢字などを正規表現でパターンマッチさせる方法?

    こんにちは,よろしくお願いします。 名前(姓と名に分けて)を入力してもらうフォームを作っています。 姓名を日本語,つまり,漢字,ひらがな,カタカナを全角(2バイト文字?)で入力してもらいたいと考えています。 ぜんぜんわからないのですが,パターンを次のように考えて, var pattern = "[亜-熙ぁ-んァ-ヶ]+"; if(seimei.match(pattern)){ 上記のようにやってみたらうまくいったように思えましたが,「蓬莱」や「紀香」などの漢字を入力するとマッチしません。 文字セットは”UTF-8”を使っています。 すべての漢字,ひらがな,カタカナをマッチさせるようにするにはどのようなパターンで行えばいいのでしょうか?教えてください。 よろしくお願いします。

  • / [ 【 の文字をマッチさせるには?

    / [ 【 の文字をマッチさせるには? 環境 perl version 5.005_03 while($line = <IN>){ if($line =~ ///){ (マッチした場合の処理) } } などとしたいのですが、/ [ 【 の文字にマッチさせるには どのように記述したらいいのでしょうか? 上記のように普通に指定するとマッチしませんでした。 よろしくお願いします。

  • 正規表現のパターンマッチがうまくいきません。

    正規表現のパターンマッチがうまくいきません。 入力した文字を含むデータを抽出しようとしているのですが、エラーは出ないものの、ヒットしません。 次の構文をそれぞれを試してみました。 目的は入力された文字$matchを含む$textを@queryに入れることです。 if($text =~ /$match/){ push(@query, $text); } if($text =~ /\$match/){ push(@query, $text); } if($text =~ /.*\$match.*/){ push(@query, $text); } if($text =~ m/.*\$match.*/){ push(@query, $text); } 半角英数で何度か試したのですが、どれでやってもヒットしてくれません。 どこをどのように訂正すればいいでしょうか。 お分かりの方ぜひご指導ください。 ちなみによく入力データを$in{aaa}とか$QUERY{aaa}などとまとめることがあるのですが、これを正規表現にそのまま入れるにはどうしたらいいでしょうか。 {}は量指定子になるのでこのままではエラーになるかなとも思うのですが、\などでエスケープすればいいのでしょうか。 上の$matchも元々は$in{aaa}なのですが、 $match = $in{aaa} として変えています。

    • ベストアンサー
    • Perl
  • パターンマッチが、ひっかかりません。ActivePerl のバグでしょ

    パターンマッチが、ひっかかりません。ActivePerl のバグでしょうか? $doc =~ m%<SCRIPT language=javascript type=text/javascript>(.+?)</SCRIPT>%; $1 に、何も入りません。 $doc は、複数行のデータです。(改行が、複数ある) 中身を検索すると、確かに、この文字列は、存在しています。 環境は、ActivePerl 5.12.1 Build 1201 です。 どなたか、助けてください。

    • ベストアンサー
    • Perl