grep, array und regex

27/09/2012 - 14:31 von Nils Müller | Report spam
Moin, Moin

ich habe folgende Routine, die auch prima funktioniert:

@Namen = ('Anton', 'Berta', 'Càsar', 'Doris', 'Emil', 'Fritz');
$name = 'Anton';

sub unterroutine{
[...]
return 1 unless (grep /^\Q$name\E$/i, @Namen);
}

Nun möchte ich dies aber in der Form erweitern, dass die Namen im Array auch
regulàre Ausdrücke enthalten können und der Suchstring diesen matched:

@Namen = ('Ant#?', 'Ber#?', 'Càs#?', '#?ris', 'Emil', 'Fritz');
$name = 'Anton';

sub unterroutine{
[...]
return 1 unless (grep /^\Q$name\E$/i, @Namen);
}

Aber irgendwie bekomme ich es nicht hin.

Gruß,
Nils
 

Lesen sie die antworten

#1 Wolf Behrenhoff
27/09/2012 - 14:55 | Warnen spam
Am 27.09.2012 14:31, schrieb Nils Müller:
Moin, Moin

ich habe folgende Routine, die auch prima funktioniert:

@Namen = ('Anton', 'Berta', 'Càsar', 'Doris', 'Emil', 'Fritz');
$name = 'Anton';

sub unterroutine{
[...]
return 1 unless (grep /^\Q$name\E$/i, @Namen);
}



Das testet, ob $name in irgendeinem der Strings aus @Namen vorkommt.
Also zum Beispiel, wenn du $name = "a" nimmst, werden hier ja sowohl
Berta als auch Càsar matchen - und eigentlich weißt du bereits nach dem
erfolgreichen Match bei Berta, was rauskommt und könntest aufhören zu
suchen...

Nun möchte ich dies aber in der Form erweitern, dass die Namen
im Array auch regulàre Ausdrücke enthalten können und der Suchstring
diesen matched:

@Namen = ('Ant#?', 'Ber#?', 'Càs#?', '#?ris', 'Emil', 'Fritz');
$name = 'Anton';

sub unterroutine{
[...]
return 1 unless (grep /^\Q$name\E$/i, @Namen);
}



Deine Definition ist nicht ganz klar. In Perl: string =~ /regexp/. Du
versuchst hier irgendwas wie /regexp/=~/regexp/. Das geht aber nicht.
Was genau soll dann rauskommen?

Vielleicht möchtest du das hier:
my $re = join "|", @Namen;
if ($name =~ /$re/) { ... }

- Wolf

Ähnliche fragen