Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6109[/thread]

Suchen mit Array

Leser: 1


<< |< 1 2 >| >> 20 Einträge, 2 Seiten
Gast Gast
 2004-03-02 10:00
#80451 #80451
Hallo,
ich suche nach einer Anzahl verschiedener Muster:
Code: (dl )
elsif ($blankname =~ m/05A-160A|06A-160A|07A-160A|08A-160A|09A-160A|10A-160A|13A-160A/i)


Kann ich die Muster in ein Array packen und wie funktioniert das dann mit dem |.

Vielen Dank für Eure Hilfe
havi
 2004-03-02 10:23
#80452 #80452
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl

use warnings;
use strict;

my $blankname = "07A-160A";
my @array = ("05A-160A", "06A-160A", "07A-160A", "08A-160A", "09A-160A", "10A-160A", "13A-160A");

for (my $i = 0; $i <= $#array; $i++) {
print "Gefunden.\n" if $blankname eq $array[$i];
} # for


Gruss
Bernd2
 2004-03-02 10:34
#80453 #80453
User since
2004-03-02
4 Artikel
BenutzerIn
[default_avatar]
Hallo,

es ist so das ich schon mit Regex suchen muß da der String zB 07A-160A nur ein Teil von
$blankname ist.
Meine Frage zielte auf die Übergabe von Suchmustern als Array.

Gruß
Bernd
kabel
 2004-03-02 10:39
#80454 #80454
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
du kannst auch die re zusammenbasteln:

Code: (dl )
1
2
my $re_as_str = join "|", @havis_array;
if ($blankname =~ $re_as_str) { ... }


wenn allerdings $re_as_str oft gebraucht wird, dann lohnt eventuell die (explizite) kompilierung mittels qr//:

Code: (dl )
1
2
3
my $re_as_str = join "|", @havis_array;
my $re = qw/$re_as_str/;
if ($blankname =~ $re) { ... }


vorteil: die kompilierung des strings in eine re fällt weg.
-- stefan
Bernd2
 2004-03-02 10:42
#80455 #80455
User since
2004-03-02
4 Artikel
BenutzerIn
[default_avatar]
Vielen Dank

so gehts.

Gruß

Bernd
kabel
 2004-03-02 11:16
#80456 #80456
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
ich muss mich korrigieren:

Code: (dl )
1
2
3
my $re_as_str = join "|", @havis_array;
my $re = qw/$re_as_str/;
if ($blankname =~ $re) { ... }


da sollte natürlich stehen:

Quote
my $re = qr/$re_as_str/;
-- stefan
ptk
 2004-03-02 12:54
#80457 #80457
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=kabel,02.Mar..2004, 10:16]
Code: (dl )
my $re_as_str = join "|", @havis_array;
[/quote]
Besser:
Code: (dl )
my $re_as_str = join "|", map { quotemeta } @havis_array;
, besonders wenn @havis_array nicht bekannt ist und Regexp-Metazeichen enthaelt.
pq
 2004-03-02 14:05
#80458 #80458
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Bernd2,02.03.2004, 09:34]es ist so das ich schon mit Regex suchen muß da der String zB 07A-160A nur ein Teil von
$blankname ist.[/quote]
wieso das? wieso versuchen es die wenigsten leute eigentlich mit der
index()-funktion? leute, solange ihr einen string wie '07A-160A' habt,
ist regex doch overkill. regex werden gebraucht, wenn etwas variables
gesucht wird...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Relais
 2004-03-02 14:10
#80459 #80459
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=pq,02.03.2004, 13:05][quote=Bernd2,02.03.2004, 09:34]wieso versuchen es die wenigsten leute eigentlich mit der index()-funktion?[/quote]
Weil sie Regexen zuerst gelernt haben, eben weil die in Perl ja sooo wichtig sind.
Regexen lernen war sehr schwer, die haben sich ganz zentral im Kopf breit gemacht.

index() ist den Leuten meist erst gar nciht bekannt, und falls doch, dann kann es sich im "Inhaltsverzeichnis" in den Köpfen nur noch sehr schwer vor die Regexen drängeln.

[me] bewundert die Leute, die das hingekriegt haben. 8)\n\n

<!--EDIT|Relais|1078229490-->
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
kabel
 2004-03-02 15:36
#80460 #80460
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
[quote=pq,02.03.2004, 13:05]wieso das? wieso versuchen es die wenigsten leute eigentlich mit der index()-funktion?[/quote]
ich finde es intuitiver. index erlaubt ja nur das suchen nach einem string, in einer regex kann ich ein "oder" (mehr oder weniger, siehe post von ptk) direkt ausdrücken. sicher, du kannst mit einer subroutine nen wrapper ausenrumbasteln, das ist dann aber noch weniger intuitiv...

ok, das war ein wirklich schlechter erklärungsversuch :)
der von Relais dürfte den nagel auf den kopf treffen
-- stefan
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2004-03-02 10:00.