回答:
文字列に部分文字列が含まれているかどうかを確認するには、次のindex
関数を使用できます。
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
$substr
in が最初に出現する位置を返し$str
ます。部分文字列が見つからない場合は-1 を返します。
もう1つの可能性は、Perlが有名な正規表現を使用することです。
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
は.
任意の文字に一致する可能性があるため、バックスラッシュが必要です。\Q
and \E
演算子を使用すると、これを回避できます。
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
または、ユージーンyで述べたようにして、インデックス関数を使用することもできます。警告の言葉:インデックスは-1
、undef
またはの代わりに一致が見つからない場合にaを返します0
。
したがって、これはエラーです。
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
がs1.domain.com
文字列の先頭にある場合、これは間違っています。私は個人的にこれを何度もやられました。
index()
単純な場合、正規表現よりも高速だと思いますか?
=~
、index()
、~~
およびmatch::simple
すべてのビットに見えたawk
... -wardを: - \
domain.com
て一致させることができませんsubdomain.domain.com
。
大文字と小文字を区別しない部分文字列の例
これは、部分文字列をチェックする前に文字列を小文字に変換するEugeneの回答の拡張です。
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
:
)文字列内の正規表現に特別な文字をダブルエスケープする必要がなくなります。