检查字符串是否包含子字符串
要找出一个字符串包含的子字符串您可以使用index
功能:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
它将返回的$substr
中第一次出现的位置$str
,或-1,如果没有找到子。
另一种可能性是使用regular expressions这就是Perl是著名的:
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
是在你的字符串的开头。我已经不止一次地被烧毁了。
我想在简单情况下'index()'比regexps更快? –
尝试perl回答有关[删除子字符串]的问题(http://stackoverflow.com/a/35593275/2019415) - 我没有比较速度,但'=〜','index()','~~'和['match :: simple'](https://metacpan.org/pod/match::simple)都显得有点'awk'-ward ...: - \ –
您还必须确保字符串你正在比较不区分大小写。 S1.DOMAIN.COM不适用于子字符串。但是如果你使用lc($ givendomain),然后将其与“s1.domain.com”进行比较,那么这将起作用。此外,子字符串不一定是正确的方法 - 请参阅我上面的注释到eugene y的回应 – BlueChips23
不区分大小写的子串例
这是尤金的答案,其将字符串检查字串前面为小写的扩展:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
这种方式是特别preferrable,当你使用一个变量进行搜索 - 这样你就不必对双字符转义(在这个变量字符串中),这对于正则表达式来说是特殊的(比如':')。 – evgeny9