$text_to_search = "example text with [foo] and more";
$search_string = "[foo]";
if ($text_to_search =~ m/$search_string/)
print "wee";
上記のコードを守ってください。何らかの理由で、$ text_to_search変数でテキスト「[foo]」を見つけ、見つかったら「wee」を出力したいと思います。これを行うには、Perlが演算子ではなく文字として扱うように、[and]を[and]に置き換える必要があります。
[
式を使用して、最初に]
と\[
を\]
とs///
に置き換えることなくこれを行うにはどうすればよいですか?
つかいます \Q
変数内の潜在的に問題のある文字を自動エスケープします。
if($text_to_search =~ m/\Q$search_string/) print "wee";
quotemeta
関数を使用します。
$text_to_search = "example text with [foo] and more";
$search_string = quotemeta "[foo]";
print "wee" if ($text_to_search =~ /$search_string/);
Perlがバージョン5.16以降の場合はquotemeta (\Q \E)
を使用できますが、以下の場合は正規表現の使用をまったく避けることができます。
たとえば、index
コマンドを使用して:
if (index($text_to_search, $search_string) > -1) {
print "wee";
}