没有在所有数组中查找的正则表达式做了些什么

时间:2013-01-18 13:55:32

标签: regex perl

我惨遭失败,要求perl“在数组中搜索我感兴趣的元素,写下他们的名字或写一个NA,如果你找不到它们。”

例如,假设我在数组中寻找Orc,Troll和Elf

    @creatures = qw/Troll Knight Elf Shrubbery Dragon Ni/;

如果没有找到他们写作和NA,我怎么能检查他们和(我的大问题)。 在这个例子中,我会寻找这样的东西:

    NA  Troll   Elf

由于

3 个答案:

答案 0 :(得分:3)

您可以使用哈希进行快速查找:

my %creatures = map { $_ => 1 } @creatures;

print $creatures{$_} ? $_ : "NA" for qw(Orc Troll Elf);

请注意,这与大小写匹配,因此它会将“orc”和“Orc”视为两个不同的东西。您可以通过事先转换为特定案例来解决此问题:

my %creatures = map { lc($_) => 1 } @creatures;

print $creatures{lc($_)} ? $_ : "NA" for qw(Orc Troll Elf);

您还可以使用grep

for my $race (qw(Orc Troll Elf)) {
    if (grep /^$race$/i, @creatures) {
        print $race;
    } else {
        print "NA";
    }
}

请注意使用/i修饰符来使匹配大小写不敏感。

答案 1 :(得分:1)

您可以使用智能匹配:

#!/usr/bin/perl
use warnings;
use strict;

my @creatures = qw/Troll Knight Elf Shrubbery Dragon Ni/;
my @searches  = qw/Orc Troll Elf/;

for my $search (@searches) {
    if ($search ~~ @creatures) {
        print $search, ' ';
    } else {
        print "NA ";
    }
}

答案 2 :(得分:0)

掌握perl的基本知识:

use warnings;
use strict;

my @str = qw(Troll Knight Elf Shrubbery Dragon Ni);
my %hash;
my @to_match = qw(Orc Troll Elf);
foreach my $s (@str) {
    $hash{$s} = $s;
}

foreach (@to_match) {
    if (defined $hash{$_}) {
        print "$_ ";
    } else {
        print "NA ";
    }
}