如何使用Perl检查给定字符串是否包含某个子字符串?
更具体地说,我想看看给定的字符串变量中是否存在s1.domain.com
。
答案 0 :(得分:210)
要查明字符串是否包含子字符串,您可以使用index
函数:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
它将返回$substr
中第一次出现$str
的位置,如果找不到子串,则返回-1。
答案 1 :(得分:53)
另一种可能性是使用Perl着名的regular expressions:
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
需要使用反斜杠,因为.
可以匹配任何字符。您可以使用\Q
和\E
运算符解决此问题。
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
或者,您可以按eugene y说明并使用index功能。
只需提醒一句:当找不到匹配项而不是-1
或undef
时,索引会返回0
。
因此,这是一个错误:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
如果s1.domain.com
位于字符串的开头,则会出错。我个人不止一次被烧了。
答案 2 :(得分:13)
不区分大小写的字符串示例
这是Eugene的答案的扩展,它在检查子字符串之前将字符串转换为小写:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}