- ベストアンサー
正規表現をエスケープさせる関数はあるのでしょうか?\はつけたくないです。
=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__
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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 してみて下さい。場合によってはこれで間に合うかもしれません。