Thread Benötige Hilfe bei RegEx (17 answers)
Opened by jogi at 2007-08-04 19:41

PerlProfi
 2007-08-05 01:04
#97519 #97519
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
So, entschuldige das ich jetzt erst poste, ich hatte zwischendurch leider zutun.

Ich habe gerade ein Skript entworfen, das mit den Daten aus dem Link super funktioniert:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
while ( my $line = <DATA> ) {
chomp($line);
print "Zeile: $line\n";

# Optionen für Zeile2
my %z2opt = ( Authority => 0, Exit => 0, Fast => 0, Guard => 0,
Running => 0, Stable => 0, V2Dir => 0, Valid => 0 );
my $z2optstring = join( '|', keys %z2opt );

# Zeile3
if ( $line =~ /^opt v (\w+) ((?:\d+\.)*?\d+)$/ ) {
print "Zeilentyp: 3\nName: $1\nVersion: $2\n";
}

# Zeile1
if ( $line =~ /\s(\d{4}-\d\d-\d\d)\s(\d\d:\d\d:\d\d)\s(\d+\.\d+\.\d+\.\d+)\s(\d+)\s\d+$/ ) {
print "Zeilentyp: 1\nDatum: $1\nUhrzeit: $2\nIP Adresse: $3\nPort: $4\n";
}

# Zeile2
if ( $line =~ /^s\s((?:(?:$z2optstring)\s*)+)$/ ) {
my $options = $1;
print "Zeilentyp: 2\n";

foreach my $opt ( keys %z2opt ) {
$z2opt{$opt} = 1 if $options =~ /$opt/;
print $opt, ': ', $z2opt{$opt} ? 'yes' : 'no', "\n";
}
}

print "\n";
}

Eine Zeile3-Typ Zeile ist in deinen Daten leider nicht vorhanden, daher konnte ich das Verhalten bei einer solchen Zeile leider nicht testen, aber ich denke es wird alles funktionieren.

Zeile3- und Zeile1-Typ Zeilen werden fast genauso gematcht wie auch vorher.
Zeile2-Typ Zeilen haben einen eigenen Hash für die möglichen Optionen bekommen, dadurch ist es möglich die Optionen anhand des Hashes variabel zu halten.
Die Reihenfolge der Optionen spielt jetzt auch keine Rolle mehr.

Abfragen kann man die einzelnen Optionen nachdem die foreach Schleife durchlaufen ist, sie sind dann entweder gesetzt ( 1 ), oder eben nicht gesetzt ( 0 ).

Leider musste ich das Beispiel klein halten und ein paar Kommentare entfernen/verändern, da das Board wohl immer noch die Zeichengrenze auf 2000 eingestellt hat.

MfG

View full thread Benötige Hilfe bei RegEx