Regex Perl正则表达式在应该匹配时不匹配

Regex Perl正则表达式在应该匹配时不匹配,regex,perl,Regex,Perl,我有两个变量,一个是短字符串,另一个是长字符串,应该包含短字符串。我已经在脚本中添加了一些指纹,但是匹配不起作用-有人能帮我解释一下吗: print OUT "Omni: [$omnihostname]\n"; print OUT "API: $api\n"; print OUT "Match: Y\n" if ($omnihostname =~ /$api/i); print OUT "Match: N\n" if ($omnihostname !~ /$api/i); print OUT "

我有两个变量,一个是短字符串,另一个是长字符串,应该包含短字符串。我已经在脚本中添加了一些指纹,但是匹配不起作用-有人能帮我解释一下吗:

print OUT "Omni: [$omnihostname]\n";
print OUT "API: $api\n";
print OUT "Match: Y\n" if ($omnihostname =~ /$api/i);
print OUT "Match: N\n" if ($omnihostname !~ /$api/i);
print OUT "-----------------------------------------------------------\n";
以下是输出:

Omni: [ASW02SLO]
API: deviceDetail@deviceId = 10401381@hostName = ASW02SLO@ipAddress = [other redundant text here]
Match: N
-----------------------------------------------------------
谢谢,
Ben

在我看来,您在正则表达式中使用的术语是错误的,即您希望确定较短的字符串
$omnihostname
是否包含在
$API
中,而不是相反

因此,有一个比正则表达式更好的解决方案:

if (index($API, $omnihostname) >= 0);  # Match: Y
如果需要不区分大小写,请根据需要在
lc(…)
中包装一个或两个参数


注意:
fc(…)
在更高版本的Perl中用于大小写折叠是首选的。

在我看来,正则表达式中的术语是错误的,即您希望确定较短的字符串
$omnihostname
是否包含在
$API
中,而不是相反

因此,有一个比正则表达式更好的解决方案:

if (index($API, $omnihostname) >= 0);  # Match: Y
如果需要不区分大小写,请根据需要在
lc(…)
中包装一个或两个参数


注意:
fc(…)
在更高版本的Perl中用于大小写折叠是首选方法。

这是我将采用的方法:

use strict;
use warnings; 

my $ss = 'string'; # your 'key'

my @ls = qw(longstring longstringlong longstri); # an array to search through

foreach(@ls){
    chomp;
    print "Match! $_\n" if /$ss/; 
    print "No match! $_\n" if ! /$ss/;
}


我会这样做:

use strict;
use warnings; 

my $ss = 'string'; # your 'key'

my @ls = qw(longstring longstringlong longstri); # an array to search through

foreach(@ls){
    chomp;
    print "Match! $_\n" if /$ss/; 
    print "No match! $_\n" if ! /$ss/;
}


为什么
index
是比正则表达式更好的解决方案呢?你是个明星,我每天都在用这些函数,但是我的大脑在把变量转换成变量而不是把字符串转换成变量时有点笨-谢谢!顺便说一句,我保留了正则表达式,只是交换了四舍五入的值:)@Borodin好吧,一开始我没有区分大小写,但是一般来说,如果你只需要一个纯粹的子字符串搜索,那么调用
index
应该比正则表达式编译/匹配更有效-这正是
index
函数的设计目的。为什么
index
比正则表达式更好呢?你是个明星,我每天都在用这些,但在把变量转换成变量而不是把字符串转换成变量的过程中,我的大脑有点发屁——谢谢!顺便说一句,我保留了正则表达式,只是将值四舍五入:)@Borodin好吧,一开始我没有区分大小写,但一般来说,如果您只需要一个纯子字符串搜索,那么调用
index
应该比正则表达式编译/匹配更有效-这正是
index
函数的设计目的。