检查字符串是否包含子字符串

时间:2011-09-02 12:17:58

标签: string perl string-matching

如何使用Perl检查给定字符串是否包含某个子字符串?

更具体地说,我想看看给定的字符串变量中是否存在s1.domain.com

3 个答案:

答案 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功能。 只需提醒一句:当找不到匹配项而不是-1undef时,索引会返回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";
}