Bagaimana cara memeriksa apakah suatu string mengandung substring tertentu, menggunakan Perl?
Lebih khusus lagi, saya ingin melihat apakah s1.domain.com
ada 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.com
ada dalam variabel string yang diberikan.
Jawaban:
Untuk mengetahui apakah sebuah string mengandung substring Anda dapat menggunakan index
fungsi:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Ini akan mengembalikan posisi kemunculan pertama $substr
dalam $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 \Q
dan \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 -1
ketika tidak dapat menemukan kecocokan alih-alih undef
atau 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.com
di awal string Anda. Saya pribadi telah dibakar dalam hal ini lebih dari sekali.
index()
lebih cepat dari regexps dalam kasus sederhana?
=~
, index()
, ~~
dan match::simple
semua tampak sedikit awk
-ward ...: - \
domain.com
mencocokkan subdomain.domain.com
menggunakan 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";
}
:
).