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

Benötige Hilfe bei RegEx

Leser: 1


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
jogi
 2007-08-04 19:41
#97504 #97504
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Hi!

Ich bin gerade völlig überfordert. Ich schaffe es nicht folgende Zeilen zu matchen. Wäre nett wenn mir jemand weiterhelfen könnte. Ihr schafft das doch sicher mit Links. ;)

Zeile 1:
Code: (dl )
r onetwothreefourfive MWMcc5Y1q5S8tX0qev1HXXh+tPQ aicBxdn2WwR33fA9aBcO2KzaLJU 2007-08-04 04:15:06 68.89.251.22 9001 0


Zeile 2:
[/code]
s Exit V2Dir Valid
s Fast Guard Stable Running V2Dir Valid
s Exit Fast Guard Stable Running V2Dir Valid
s Exit Fast Running V2Dir Valid
s Fast Running Valid
s Fast Running V2Dir Valid
s Valid
s Fast Guard Stable Running Valid
s Exit V2Dir Valid
s Fast Running Valid
s Exit V2Dir Valid
s Exit Valid
s Valid
s Fast Stable Running Valid
s Exit Fast Guard Named Stable Running V2Dir Valid
s Exit Valid
s Valid
s Exit Fast Running V2Dir Valid
s Valid
s Exit Valid
s Fast Running V2Dir Valid
s Fast Running Valid
s Fast Guard Stable Running V2Dir Valid
s Exit Fast Running Valid
s Stable Running Valid
s Exit V2Dir Valid
s Fast Named Stable Running Valid
s Fast Stable Running Valid
s Exit Valid
s Fast Stable Running Valid
s Running Valid
s Exit Running Valid
s Exit Fast Running Valid
s Exit Fast Running Valid
s Exit Running Valid
s Exit Fast Guard Stable Running Valid
s Valid
s Exit Fast Running V2Dir Valid
s Exit Fast Guard Stable Running Valid
s Exit Fast Stable Running Valid
s Fast Guard Stable Running V2Dir Valid
s Exit Fast Guard Stable Running V2Dir Valid
s Fast Guard Stable Running V2Dir Valid
s Valid
[/code]


Zeile 3:
Code: (dl )
opt v Tor 0.1.1.26


Bei Zeile 2 muss ich völlig kapitulieren, weil sie varriert. Gibt noch mehr variationen, kann aber wegen der Zeilenbegrenzung nicht mehr poste. Kann man sowas denn überhaupt matchen?

Ciao,
jogi
renee
 2007-08-04 20:10
#97505 #97505
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zeile 2 ist das gesamte unter "Zeile 2" gepostete oder immer nur eins der Möglichkeiten?

Wie liegen denn die Daten vor (eine Zeile pro Array, gehst Du mit while-Schleife über die Zeilen einer Datei)? Was soll denn am Ende rauskommen?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2007-08-04 20:16
#97506 #97506
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (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
my @array = ( 'opt v Tor 0.1.1.26',
'r onetwothreefourfive MWMcc5Y1q5S8tX0qev1HXXh+tPQ aicBxdn2WwR33fA9aBcO2KzaLJU 2007-08-04 04:15:06 68.89.251.22 9001 0',
's Exit Running Valid',
's Exit Fast Running Valid',
's Exit Fast Running Valid',
's Exit Running Valid',
's Exit Fast Guard Stable Running Valid',
's Valid',
's Exit Fast Running V2Dir Valid',
's Exit Fast Guard Stable Running Valid',
's Exit Fast Stable Running Valid',
's Fast Guard Stable Running V2Dir Valid',
's Exit Fast Guard Stable Running V2Dir Valid',
's Fast Guard Stable Running V2Dir Valid',
);

for my $line ( @array ){
    if( $line =~ /^r\s\w+/ ){
        print " Eine Zeile nach Muster 'Zeile 1'\n";
    }
    elsif( $line =~ /^opt v \w+ (?:\d+\.){3}\d+ ){
        print " Das wird eine Zeile vom Typ 'Zeile 3' sein\n";
    }
    elsif( $line =~ /^s\s(?:Exit|Fast)?[\w\s]+Valid$/{
       print "Typ 'Zeile 2'\n";
    }
}


Du hast auch nicht erklärt, was "feste" Teile sind und was variabel ist..
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jogi
 2007-08-04 20:32
#97507 #97507
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Aus Zeile 1 bräuchte ich Datum, Uhrzeit, IP Adresse und Port.

Zeile 2 kann variieren. Also entweder steht dort "s Exit V2Dir Valid" oder "s Fast Guard Stable Running V2Dir Valid" oder "s Exit Fast Running Valid" usw. Hier bräuchte ich alle Vorkommnisse.

Zeile 3 ist nicht so wichtig.

Achso. Diese Zeilen stehen in einer Datei, die alle Infos aller Tor-Router bereithält. Die Zeilen 1 - 3 wiederholen sich, d.h. nach Zeile 3 kommt wieder eine Zeile 1.

Ciao,
jogi
renee
 2007-08-04 20:59
#97508 #97508
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zeile 3 ist also immer gleich??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jogi
 2007-08-04 21:07
#97509 #97509
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Zeile 3 ist immer gleich, nur die Versionsnummer ist von Router zu Router unterschiedlich.
jogi
 2007-08-04 21:11
#97510 #97510
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
So sähe die zu parsende Datei aus:

http://tor.xenobite.eu:81/dir-status-cache-archive...
PerlProfi
 2007-08-04 21:49
#97511 #97511
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Die Inhalte aus Zeile 1 solltest du so bekommen:
Code: (dl )
$line =~ /\s(\d{4}-\d\d-\d\d)\s(\d\d:\d\d:\d\d)\s(\d+\.\d+\.\d+\.\d+)\s(\d+)\s\d$/;

In $1 steht das Datum, in $2 die Uhrzeit, in $3 die IP Adresse und in $4 der Port.

Ich hab noch immer nicht verstanden was du aus Zeile 2 brauchst, aber so kannst du alles mögliche abfragen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$line =~ /
^s\s # am anfang immer ein s + space

# in der mitte kann einer der folgenden ausdrücke stehen,
# jeweils gefolgt von space, in genau dieser reihenfolge
(Exit)?\s*
(Fast)?\s*
(Guard)?\s*
(Stable)?\s*
(Running)?\s*
(V2Dir)?\s*

Valid$ # am ende immer Valid
/x;

# oder kurz: $line =~ /^s\s(Exit)?\s*(Fast)?\s*(Guard)?\s*(Stable)?\s*(Running)?\s*(V2Dir)?\s*Valid$/

In $1 - $6 steht jetzt ob 'exit' - 'v2dir' in der zeile vorhanden ist.

Zeile 3 siehe renees code.

MfG
PerlProfi
 2007-08-04 21:53
#97512 #97512
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Ok, ich hab mir die zu parsenden Daten gerade noch einmal angesehen und leider funktioniert mein geposteter code noch nicht, da fehlt noch was.
Ich werds mir nochmal ansehen und verbessern, dann noch einmal posten.

MfG
jogi
 2007-08-04 22:09
#97513 #97513
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Das wäre nett von dir, Danke!

Zu Zeile 2: ich möchte wissen welche Optionen vorhanden sind. Authority hast du hier vergessen.
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2007-08-04 19:41.