Bel*_*ish 105 string perl string-matching
如何使用Perl检查给定字符串是否包含某个子字符串?
更具体地说,我想看看s1.domain.com给定的字符串变量中是否存在.
Eug*_*ash 221
要查明字符串是否包含子字符串,您可以使用以下index函数:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Run Code Online (Sandbox Code Playgroud)
它将返回第一次出现的位置$substr中$str,或-1,如果子没有找到.
Dav*_* W. 55
另一种可能性是使用Perl着名的正则表达式:
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
Run Code Online (Sandbox Code Playgroud)
需要反斜杠,因为.可以匹配任何字符.您可以使用\Q和\E运算符来解决这个问题.
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
Run Code Online (Sandbox Code Playgroud)
或者,你可以像eugene所说的那样做并使用索引函数.只是一句警告:-1当索引找不到匹配而不是undef或时,索引返回0.
因此,这是一个错误:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
Run Code Online (Sandbox Code Playgroud)
如果s1.domain.com在字符串的开头,这将是错误的.我个人不止一次被焚烧过.
Jam*_*vec 14
Case Insensitive Substring示例
这是Eugene的答案的扩展,它在检查子字符串之前将字符串转换为小写:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
Run Code Online (Sandbox Code Playgroud)