• ベストアンサー

「?」が含まれるマッチについて

perlの文字マッチについて「?」が含まれる場合のマッチさせる方法について教えていただきたいです。 例) $hoge="papa?no=1,mama?no=2,cat=?no=3"; $hogehoge="cat=?no=3"; $hoge =~ m/$hogehoge/i; 上記の場合、文字内に「?」がある為にマッチしません。メタ文字として判断されているのでしょうか…。 この場合、マッチさせるにはどのような方法がありますでしょうか。 一度、「?」を違う文字に変換すれば出来るのではないかと思いますが、そのままの形でのマッチを求めています。 どうかよろしくお願いいたします。

  • hana43
  • お礼率49% (105/212)
  • Perl
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

\Q~\E

hana43
質問者

お礼

ありがとうございます。 教えていただいた方法でうまくいきました。

その他の回答 (2)

  • entree
  • ベストアンサー率55% (405/735)
回答No.3

$hoge =~ m/\Q$hogehoge\E/i; このようにすることで、$hogehogeの中身が通常の文字として解釈されます。

hana43
質問者

お礼

ありがとうございます。 教えていただいた方法でうまくいきました。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

""は展開されますから 展開する必要がなければ、文字列として認識させるため $hogehoge='cat=?no=3'; とすべき!! $hoge='papa?no=1,mama?no=2,cat=?no=3'; も・・

hana43
質問者

お礼

ご指摘ありがとうございます。 変数ではないので、おっしゃる通りの方法がいいと思います。 ありがとうございました。

関連するQ&A

  • 正規表現

    PHPのプログラミングの勉強をしています。 正規表現を使って?の1文字をマッチさせたいのですが http://hogehoge.com/?hoge=hoge などの/?の場合は正規表現でマッチさせないようにしたいのです。 宜しくお願い致します。

    • 締切済み
    • PHP
  • PHPで<a>タグ内からURLと文字を抜き出したい

    PHP4.3で $html_tag = '<a href="http://www.hogehoge.com/hogehoge/hoge/sample.html" class="hogehoge" title="hogehoge">りんく先名称</a>'; というような変数から 「http://www.hogehoge.com/hogehoge/hoge/sample.html」 のURLと 「りんく先名称」という<a>で囲まれた文字列を抜き出したいのです。 preg_matchを使っていろいろやってみたのですが、どうもうまくいきません。というか、正規表現がどのように書いていいのかわからないのですが・・・ そもそもpreg_matchを使わずとも簡単な方法があるのでしょうか? 大変恐れ入りますが、ご教授いただけませんでしょうか?

    • ベストアンサー
    • PHP
  • / [ 【 の文字をマッチさせるには?

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

  • preg_matchでのマッチが正しくされない

    メールヘッダを解析して処理させるプログラムを作成しています。 ヘッダから件名を取得するために以下のコードを記述しました。 $head = 'Return-Path: Delivered-To: hoge@hogehoge.com Received: from docomo.ne.jp (mail102.docomo.ne.jp [203.138.203.2]) by www.hogehoge.com (Postfix) with ESMTP id C73904003B for ; Fri, 25 Mar 2011 16:32:19 +0900 (JST) Date: Fri, 25 Mar 2011 16:32:24 +0900 (JST) From: huga@hogehoge.com To: hoge@hogehoge.com Subject: =?iso-2022-jp?B?GyRCJFskMiRbJDIkVSQsJFUkLBsoQg==?=hogehogehugahuga =?iso-2022-jp?B?GyRCJFskMiRbJDIkVSQsJFUkLBsoQg==?= Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit X-Virus-Scanned: clamav-milter 0.96.3 at MCN X-Virus-Status: Clean' $ptrn = '/Subject:([\s\t]*=\?iso-2022-jp\?[BQ]\?([^\?]+)\?=)+.* Message\-ID/i'; preg_match($ptrn, $head, $regs); var_dump(regs[0]); $headに別関数で取得したメールのヘッダ情報、$ptrnに正規表現での一致条件を書き出しました。 PHPの正規表現チェッカーでは正常にマッチしたのですが、preg_matchで動作させるとマッチしてくれません。 何がまずいのでしょうか? 正しくマッチさせる方法をご回答お願いします。

    • ベストアンサー
    • PHP
  • perlでの"."ドットマッチについて

    perlで.(ドット)のマッチについて 教えて貰えないでしょうか? test_01.comにマッチした時に test_01_comに変換 .(ドット)以前の文字は可変です。 testwindows.netとか testtesttesttest.jpとかもあります。 以上宜しくお願いします。

  • sedコマンド置換について(マッチした数字を演算に再利用したい)

    こんにちは Linuxのsedコマンドについて質問させてください。 軽く検索をかけたりUNIXのコマンド本を調べましたが、わかりませんでした。 例えば正規表現でマッチした数字を2倍して返す処理をする場合 perlではhogeという文字列に対して  hoge=~s/(\d+)/$1*2/g; このような処理で実現できると思います。 このように今マッチしたものに対して何か処理を行って置換するということは sedコマンド、もしくはそれを使ったシェルスクリプトで処理することは可能でしょうか? sedの方が処理速度が速いので、こちらを使いたいのです。

  • Perlの書き方について

    perlを勉強していて、似たような配列やハッシュの場合でしたらなんとか解決出来たのですが、以下の場合が思うような結果が得られず困っているので、どなたか教えていただきたく質問しました。 例) my $hoge1=10; my $hoge2=9; my $hoge3=8; my $hoge4=7; my $hoge5=6; my $hogehoge; for(1..5){ $hogehoge+=$hoge$_; } 上記の書き方の場合、「$hoge$_」でエラーが出ます。 このような場合は、どのように書けばいいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現で「)」がメタ文字の理由?

    Perlの正規表現で、「)」(カッコ閉じ)は、「(」(カッコ開け)同様メタ文字で、もし/)/のようなマッチ演算子を書いて、「)」という文字列を検索しようとすると、Unmatched ) in regexというエラーになります。 しかし、「]」(角カッコ閉じ)や、「}」(中かっこ閉じ)は、メタ文字ではなく、/]/、/}/のようなマッチ演算子は正当で、それぞれ]、}をきちんと検索するのです。 「[」(角カッコ開け、文字クラスを作る)や、「{」(中かっこ開け)はメタ文字なのに、です。 開けがこないのに閉じが来た場合、]と}はエラーにならないのに、)だけはエラーになります。 これは、なぜでしょうか。

    • ベストアンサー
    • Perl
  • Javaでスペースとダブルコートで区切る

    Javaで以下のような行を分割したいんですが苦戦しております。 1111 2222 "hogehoge hogehoge" abcde "hoge hoge hoge" これを 1111 2222 "hogehoge hogehoge" abcde "hoge hoge hoge" と区切りたい。 全体的にはスペースで区切りたいんですが、ダブルコートで括られている部分は 一つの値として区切りたい。 各項目は可変長です。 一文字ずつ解析するのはスピードの関係上出来ません。 なにかいい方法はありますでしょうか?

    • ベストアンサー
    • Java
  • 正規表現に関する質問です。HTML文から以下の条件を含む特定の画像タグ

    正規表現に関する質問です。HTML文から以下の条件を含む特定の画像タグのみをマッチしたいのですが、うまくいかず悩んでいます。どなたかアドバイス頂けると助かります。 条件:imgタグのsrcが"http://hogehoge.com/hoge.jpg"である場合のimgタグ全て 例えば以下の3つ全てにマッチさせたいのです。 1.<img src="http://hogehoge.com/hoge.jpg" /> 2.<img style="height:100px" src="http://hogehoge.com/hoge.jpg" /> 3.<img style="height:100px" src="http://hogehoge.com/hoge.jpg" alt="hoge" /> このようなことはそもそも可能かどうかということも含めご教授頂けたらと思います。 よろしくお願いします!

    • ベストアンサー
    • PHP

専門家に質問してみよう