Perlを使って、与えられた文字列が特定の部分文字列を含んでいるかどうかをどうやって確認できますか?
より具体的には、私はs1.domain.com
が与えられた文字列変数に存在するかどうか見たいです。
文字列に部分文字列が含まれているかどうかを調べるには、 index
関数を使用できます。
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
$substr
内で$str
が最初に出現した位置を返します。サブストリングが見つからない場合は-1を返します。
もう一つの可能性は 正規表現 を使うことです。これはPerlが有名なものです:
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
.
は任意の文字に一致させることができるため、バックスラッシュが必要です。これを回避するには、\Q
および\E
演算子を使用します。
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
あるいは、 eugene y のようにして index 関数を使うこともできます。単なる警告の言葉:Indexは、undef
や-1
ではなく、一致するものが見つからない場合に0
を返します。
したがって、これはエラーです。
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
s1.domain.com
が文字列の先頭にある場合、これは間違っています。私は個人的にこれに2回以上焼かれました。
大文字と小文字を区別しないサブストリングの例
これはEugeneの答えを拡張したもので、部分文字列をチェックする前に文字列を小文字に変換します。
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}