Perl kullanarak belirli bir dizenin belirli bir alt dizge içerip içermediğini nasıl kontrol edebilirim?
Daha spesifik olarak, s1.domain.comverilen 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.comverilen dize değişkeninde olup olmadığını görmek istiyorum .
Yanıtlar:
Bir dizenin alt dize içerip içermediğini öğrenmek için indexişlevi kullanabilirsiniz :
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Bu ilk bulunduğu konuma geri döner $substrolarak $strveya -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 . \QVe \Eoperatö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, undefveya 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::simpletüm biraz görünüyordu awk... -ward: - \
domain.comeşleştirme subdomain.domain.comyapamı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 .