• ベストアンサー

正規表現

変数$aのなかに変数$bが含まれていたらをperlの正規表現であらわすと どのようになるのでしょうか?if($a=~ /$b/)ではうまくいかないのですか?

noname#190095
noname#190095
  • Perl
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.2

$bの内容によります。 $bに正規表現で意味がある記号など含んでいると、 期待通りには行きません。 単に、含まれているか調べるだけなら、index で調べられます。 $a='2^8=256 2^10=1024'; $b='^8'; if($a =~ /$b/){ print "test1 OK\n"; }else{ print "test1 NG\n"; } if(index($a,$b) >= 0){ print "test2 OK\n"; }else{ print "test2 NG\n"; }

その他の回答 (2)

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

\Q~\E って使えなかったっけ? もしくは quotemeta とか.

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.1

$b = 'abc'; $a = "123$b456"; if($a =~ /$a/){ print "Match"; }else{ print "No match"; } で、Matchしましたが。

noname#190095
質問者

お礼

回答ありがとうございます。補足し忘れましたが$aにも$bにも ?+.\などのメタ文字が含まれている場合はどうなるのでしょうか? $a='http://www.hoge/index.php?aaa.mid'; $b='php?aaa.mid'; などの場合です。

関連するQ&A

  • 正規表現の書き方に困っております。

    あるSQLのダンプを変換するプログラムをPerlで書いているのですが、 うまく正規表現が書けなくて困っております。 データの途中に,が有ると、うまくいきません。 ''の中に囲まれた,は無視するという正規表現を書きたいのです。 また、'''B'も正しく処理できれば、完璧です。 #!/usr/bin/perl use strict; use warnings; #my $a = qq{'A','B',1}; --> うまくいく  ['A']['B'][1] #my $a = qq{'A,','B',1}; --> うまくいかない ['A] ['] ['] my $a = qq{',','''B',1}; --> もっとうまくいかない ['][']['] if($a =~ /(.+?),(.+?),(.+?)/){ print "[$1]\n"; print "[$2]\n"; print "[$3]\n"; }else{ print "ERR!\n"; } exit; __END__

    • ベストアンサー
    • Perl
  • 正規表現について

    あるファイルを読み込んで中に変数($xxx)が入っていたら 正規表現にて$xxxの値に変換する事は出来ますでしょうか? 試行錯誤しているのですが、上手くいかず困っています。 変数を正規表現にてマッチングさせるのも上手くいかないです。 ご教授お願いいたします。

    • 締切済み
    • PHP
  • (?:系の正規表現

    perlの正規表現で以下の意味は、ABC01かABC99のみマッチするということでよいでしょうか? /^ABC(?:01|99)$/ (?:は$1など使用しない場合に用いるで正しいでしょうか? (?系の正規表現について知識不足ですが、一覧や詳しい書籍がありましたら教えてください。 昔、 /^ABC01|99$/ とかいて、ABC99がマッチせず、99がマッチしたので、|を使うときは、()を書いたのですが$1など変に作用させたくなかったので、最近(?:系の存在を知ってもっと詳しく知りたくなりました。 (?:はPerlの正規表現特有のものでしょうか?

    • ベストアンサー
    • Perl
  • perlでの正規表現について教えてください。

    たとえば、 $A = 'aaa/bbb/ccc/ddd/eee/fff/ggg' というものがあったときにperlの正規表現でddd/のすぐ後の部分を抜き取って違う変数に入れたいのですが、それを正規表現で切り取りたいのですが、どうしたらいいかわからないです。 初歩的な質問ですが、お答えいただければ幸いです。 よろしくお願いします。

  • 正規表現の置換演算子に変数を埋め込むことをしたいのですが

    正規表現の置換演算子に変数を埋め込むことをしたいのですが $a = 'abcd0001'; $b = '0005'; $a =~ s/abcd([0-9]{4})/abcd\$b/; #=> $a=[abcd$b] print "\$a=[$a]\n"; とすると、abcd$bとなります。 置換演算子1行で、abcd0005とする方法はあるのでしょうか?

    • ベストアンサー
    • Perl
  • 正規表現について

    いつもお世話になっております。 perlの正規表現で分からない事があります。 ご存知の方がいらっしゃれば、アドバイスを頂けますようよろしくお願い致します。 (質問内容) 以下のようなプログラムを実行した場合、matchが出力されてしまいます。 $aには、「、IS」を設定しているので、「真」と扱われないと思うのですが、何故、matchが出力されるのでしょうか? また、「偽」として処理をいしたい場合、 どのようにすればよろしいのでしょうか? #!/usr/bin/perl $a = "、IS"; $b = "AIS"; if ($a =~ $b){ print "match\n"; } else{ print "not match\n"; }

  • 正規表現内での変数の扱いに関して

    正規表現内での変数の扱いに関して あるの変数の文字列が別の変数の文字列を冒頭に含むかどうか判別した上でその差分を抽出するコードを書こうとしています。 $a='komekoron'; $b='kome'; if($a=~/^$b(.+)$/){print $1}; このコードを実行すると「koron」が出力されます。 同様に以下のコードで「:」を出力させたいのですが上手くいきません。 $a='*:'; $b='*'; if($a=~/^$b(.+)$/){print $1}; 出力内容は「*:」 これは変数内の文字列がパタンとして扱われているのでしょうか。どうすれば意図する動作になるでしょうか。ご教授願います。

    • ベストアンサー
    • Perl
  • 正規表現

    if(str.match(/^[-+]?\d+$/)) alert("matched !"); この正規表現(先頭に+か-かをつけてあとは数字という表現です。)で 全体が//で囲まれてますがどうしてでしょうか? オプションとしてgとかiがあるのならわかるのですがないみたいです。 また^と$をつかった表現で例えば^AB$とした場合どうしてACBは含まれないのでしょうか?

  • これは正規表現とは言えないでしょうか?

    正規表現を勉強しようと思っているのですが まずはじめに確認させて下さい。VBAです。 Sub 正規表現() If a Like "*a*" Then End If End Sub は正規表現とは言えないでしょうか? *を使っているからそう思いました。 Dim re As RegExp Set re = New RegExp を使わないと、正規表現といえないのでしょうか? よろしくお願い致します。

  • 正規表現が読めない

    諸般の事情でperlスクリプトに手を入れることになりました。 perlについてはまったくの素人であることに加えて、正規表現が読めません。お恥ずかしいのですが、下記を読み下していただけないでしょうか。 (変数のリスト) = map{/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} ($tmp =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g); $tmpはカンマ区切りのテキストです。

    • ベストアンサー
    • Perl

専門家に質問してみよう