Perl kullanarak belirli bir dizenin belirli bir alt dizge içerip içermediğini nasıl kontrol edebilirim?
Daha spesifik olarak, s1.domain.com
verilen dize değişkeninde olup olmadığını görmek istiyorum .
Perl kullanarak belirli bir dizenin belirli bir alt dizge içerip içermediğini nasıl kontrol edebilirim?
Daha spesifik olarak, s1.domain.com
verilen dize değişkeninde olup olmadığını görmek istiyorum .
Yanıtlar:
Bir dizenin alt dize içerip içermediğini öğrenmek için index
işlevi kullanabilirsiniz :
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Bu ilk bulunduğu konuma geri döner $substr
olarak $str
veya -1 substring bulunmazsa.
Diğer bir olasılık, Perl'in meşhur olduğu düzenli ifadeler kullanmaktır :
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
Ters eğik çizgi, .
herhangi bir karakterle eşleşebileceği için gereklidir . \Q
Ve \E
operatörlerini kullanarak bu sorunu aşabilirsiniz.
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
Ya da eugene y'nin belirttiği gibi yapabilir ve indeks işlevini kullanabilirsiniz . Sadece bir uyarı kelimesi: Dizin -1
, undef
veya yerine eşleşme bulamadığında bir döndürür 0
.
Dolayısıyla bu bir hatadır:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
Dizinizin başındaysa bu yanlış olacaktır s1.domain.com
. Şahsen bu konuda bir kereden fazla yandım.
index()
basit durumda normal ifadelerden daha hızlıdır?
=~
, index()
, ~~
ve match::simple
tüm biraz görünüyordu awk
... -ward: - \
domain.com
eşleştirme subdomain.domain.com
yapamıyorum, herhangi bir fikir?
Büyük / Küçük Harfe Duyarlı Olmayan Alt Dize Örneği
Bu, alt dizeyi kontrol etmeden önce dizeleri küçük harfe dönüştüren Eugene'nin yanıtının bir uzantısıdır:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
:
) için özel olan karakterlerin (bu değişken dizesinde) çift çıkışına gerek kalmaz .