回答:
文字列に部分文字列が含まれているかどうかを確認するには、次のindex関数を使用できます。
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
$substrin が最初に出現する位置を返し$strます。部分文字列が見つからない場合は-1 を返します。
もう1つの可能性は、Perlが有名な正規表現を使用することです。
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
は.任意の文字に一致する可能性があるため、バックスラッシュが必要です。\Qand \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";
}
:)文字列内の正規表現に特別な文字をダブルエスケープする必要がなくなります。