String 检查字符串是否包含子字符串
如何使用Perl检查给定字符串是否包含某个子字符串String 检查字符串是否包含子字符串,string,perl,string-matching,String,Perl,String Matching,如何使用Perl检查给定字符串是否包含某个子字符串 更具体地说,我想查看给定字符串变量中是否存在s1.domain.com。要了解字符串是否包含子字符串,可以使用以下函数: if (index($str, $substr) != -1) { print "$str contains $substr\n"; } 它将返回$str中第一次出现的$substr的位置,如果未找到子字符串,则返回-1。另一种可能是使用Perl的著名功能: if ($mystring =~ /s1\.domai
更具体地说,我想查看给定字符串变量中是否存在
s1.domain.com
。要了解字符串是否包含子字符串,可以使用以下函数:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
它将返回
$str
中第一次出现的$substr
的位置,如果未找到子字符串,则返回-1。另一种可能是使用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);
}
或者,您可以按照说明操作并使用该函数。
警告一句:索引在找不到匹配项时返回-1
,而不是undef
或0
因此,这是一个错误:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
如果
s1.domain.com
位于字符串的开头,则这将是错误的。我个人已经不止一次被烧掉了。不区分大小写的子字符串示例
这是Eugene答案的扩展,它在检查子字符串之前将字符串转换为小写:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
当您使用变量进行搜索时,这种方法尤其可取-这种方法不必使用双转义字符(在此变量字符串中),这是正则表达式的专用字符(如
:
)。请参见此方法-我想索引()
在简单的情况下比regexp快?一个关于以下问题的perl尝试性回答-我没有比较速度,但=~
,索引()
,~
,所有这些似乎都有点awk
-ward…:-\您还必须确保要比较的字符串不区分大小写。S1.DOMAIN.COM将不适用于子字符串。但是如果你使用lc($givendomain),然后将其与“s1.domain.com”进行比较,那么就可以了。此外,子字符串不一定是正确的方法-请参阅我上面对eugene y的注释response@DavidW.不知何故,我无法使用上面的正则表达式使domain.com
与subdomain.domain.com
匹配,有什么想法吗?请注意,对于不区分大小写的比较,建议使用lc
。