• ベストアンサー

正規表現をエスケープさせる関数はあるのでしょうか?\はつけたくないです。

=head Perlの正規表現で例えば aa+aaという文字列をマッチさせたいのですがわざわざ\をいれずに、正規表現をエスケープするような関数? $k = ○○($k); はあるのでしょうか? =cut #my $k = 'aa+aa'; # だとマッチせず my $k = 'aa\+aa'; # だとマッチします。 my $dat = 'aa-aa+aa-aa'; if($dat =~ /($k)/){ print "見つかりました\n"; } print "OK\n"; exit; __END__

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

quotemeta がまさにその関数です。   my $k = quotemeta('aa+aa');     # aa\+aa また、メタ文字 \Q~\E を使っても同様で、~部分に含まれるメタ文字が無効化されて評価されます。   my $k = 'aa+aa';   if ($dat =~ /(\Q$k\E)/) {      # /(aa\+aa)/ を指定したのと同じ。

その他の回答 (1)

  • hara_peko
  • ベストアンサー率28% (11/38)
回答No.2

perldoc -f quotemeta してみて下さい。場合によってはこれで間に合うかもしれません。

関連するQ&A

専門家に質問してみよう