检查一个string是否包含一个子string

我怎样才能检查给定的string是否包含一个特定的子string,使用Perl?

更具体地说,我想看看s1.domain.com是否存在于给定的stringvariables中。

要找出一个string是否包含子string,可以使用index函数:

 if (index($str, $substr) != -1) { print "$str contains $substr\n"; } 

它将返回$str第一次出现的位置,如果未find子string,则返回-1。

另一种可能性是使用正则expression式 ,Perl是着名的:

 if ($mystring =~ /s1\.domain\.com/) { print qq("$mystring" contains "s1.domain.com"\n); } 

反斜杠是需要的,因为a . 可以匹配任何字符。 您可以使用\Q\E运算符来解决这个\Q

 my $substring = "s1.domain.com"; if ($mystring =~ /\Q$substring\E/) { print qq("$mystring" contains "$substring"\n); } 

或者,你可以按照eugene的说法使用索引函数。 只是一个警告:索引返回一个-1当它找不到一个匹配,而不是一个undef0

因此,这是一个错误:

 my $substring = "s1.domain.com"; if (not index($mystring, $substr)) { print qq("$mystring" doesn't contains "$substring"\n"; } 

如果s1.domain.com位于string的开头,这将是错误的。 我已经不止一次地被烧毁了。

不区分大小写的子string示例

这是Eugene的答案的扩展,它在检查子string之前将string转换为小写字母:

 if (index(lc($str), lc($substr)) != -1) { print "$str contains $substr\n"; }