Bagaimana cara memeriksa apakah suatu string mengandung substring tertentu, menggunakan Perl?
Lebih khusus lagi, saya ingin melihat apakah s1.domain.comada dalam variabel string yang diberikan.
Bagaimana cara memeriksa apakah suatu string mengandung substring tertentu, menggunakan Perl?
Lebih khusus lagi, saya ingin melihat apakah s1.domain.comada dalam variabel string yang diberikan.
Jawaban:
Untuk mengetahui apakah sebuah string mengandung substring Anda dapat menggunakan indexfungsi:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Ini akan mengembalikan posisi kemunculan pertama $substrdalam $str, atau -1 jika substring tidak ditemukan.
Kemungkinan lain adalah menggunakan ekspresi reguler yang merupakan hal terkenal dari Perl:
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
Garis miring terbalik diperlukan karena .dapat mencocokkan karakter apa pun. Anda dapat menyiasatinya dengan menggunakan operator \Qdan \E.
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
Atau, Anda bisa lakukan sebagai eugene y dinyatakan dan menggunakan indeks fungsi. Hanya kata peringatan: Indeks mengembalikan -1ketika tidak dapat menemukan kecocokan alih-alih undefatau 0.
Jadi, ini adalah kesalahan:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
Ini akan salah jika s1.domain.comdi awal string Anda. Saya pribadi telah dibakar dalam hal ini lebih dari sekali.
index()lebih cepat dari regexps dalam kasus sederhana?
=~, index(), ~~dan match::simplesemua tampak sedikit awk-ward ...: - \
domain.commencocokkan subdomain.domain.commenggunakan REGEX di atas, ada ide?
Contoh Substring Tidak Peka Huruf Besar / Kecil
Ini adalah perpanjangan dari jawaban Eugene, yang mengubah string menjadi huruf kecil sebelum memeriksa substring:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
:).