Câu trả lời:
Để tìm hiểu xem một chuỗi có chứa chuỗi con hay không, bạn có thể sử dụng index
hàm:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Nó sẽ trả về vị trí của lần xuất hiện đầu tiên của $substr
in $str
hoặc -1 nếu không tìm thấy chuỗi con.
Một khả năng khác là sử dụng các biểu thức chính quy mà Perl nổi tiếng:
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
Dấu gạch chéo ngược là cần thiết vì một .
có thể khớp với bất kỳ ký tự nào. Bạn có thể giải quyết vấn đề này bằng cách sử dụng toán tử \Q
và \E
.
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
Hoặc, bạn có thể làm như eugene y đã nêu và sử dụng hàm chỉ mục . Chỉ là một lời cảnh báo: Chỉ mục trả về a -1
khi nó không thể tìm thấy kết quả phù hợp thay vì undef
hoặc 0
.
Do đó, đây là một lỗi:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
Điều này sẽ sai nếu s1.domain.com
nằm ở đầu chuỗi của bạn. Cá nhân tôi đã bị đốt cháy về điều này hơn một lần.
index()
là nhanh hơn regexps trong trường hợp đơn giản?
=~
, index()
, ~~
và match::simple
tất cả dường như một chút awk
-ward ...: - \
domain.com
khớp subdomain.domain.com
bằng REGEX ở trên, có ý kiến gì không?
Ví dụ về chuỗi con không phân biệt chữ hoa chữ thường
Đây là phần mở rộng của câu trả lời của Eugene, chuyển đổi các chuỗi thành chữ thường trước khi kiểm tra chuỗi con:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
:
).