perl中的Grep为我提供了与正则表达式匹配的所有行。
对前-
{
my @FAMILY_MAP= ("A2LVLX","LVLX","O2LVLX");
my $search="LVLX";
my @match = grep (/ALVL/, @FAMILY_MAP);
print @match;
}这里,我的预期输出是LVLX,但我得到数组中的所有三个元素。这也是Linux终端中预期的行为(如果grep是在包含这三个单词的文件上完成的)。但是我必须使用终端中的grep -w " LVLX“来获得LVLX作为输出。我需要一种使用perl复制相同内容的方法。有什么暗示吗?
发布于 2017-10-17 12:40:16
只有当字符串显示为一个完整的单词时,grep -w才会匹配它。为此,您需要在regex中使用单词边界(\b)转义序列。
my @family_map = ("A2LVLX","LVLX","O2LVLX");
my $search = 'LVLX';
my @match = grep (/\b$search\b/, @family_map);
print "@match";更新:或者,如果您知道数组中的元素都是单独的单词,那么只需使用eq。
my @match = grep( $_ eq $search, @family_map);发布于 2017-10-17 12:36:15
如果你想要一个精确的匹配,你需要告诉它。您的模式/LVLX/匹配包含该模式的字符串,因为您还没有锚定它。
有两种方法可以做到这一点。你要么像这样锚定你的模式
my @match = grep(/^ALVL$/, @FAMILY_MAP);或者您使用grep的块形式并执行等式检查,这在旧的Perl中更快(非常新的Perl已经优化了此操作,但我不记得是在哪个版本中引入的)
my @match = grep { $_ eq 'ALVL' } @FAMILY_MAP;两者都会给出相同的输出。
https://stackoverflow.com/questions/46790226
复制相似问题