检查一个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
当它找不到一个匹配,而不是一个undef
或0
。
因此,这是一个错误:
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"; }