Schrift
[thread]9228[/thread]

Benötige Hilfe bei RegEx



<< >> 10 Einträge, 1 Seite
jogi
 2007-07-25 21:59
#78901 #78901
User since
2007-07-25
55 Artikel
BenutzerIn
[default_avatar]
Hi!

Ich benötige einen Regulären Ausdruck für diese Zeile:

Code: (dl )
my $line = "r lefkada ONT1/PexAjIouJXqVu3n1czcrzI RWKWxLm5zstW/apfv/SmIzW/SJY 2007-07-24 10:28:03 140.247.60.64 443 80";

Ich brauche lefkada, die IP Adresse und den Port. Mein bisheriger Versuch sieht so aus:

Code: (dl )
$line =~ /^r\s(.*?)\s\s\s\s\s(.*?)\s(.*?)$/;


Leider klappt das so nicht. Kann mir jemand bei der Aufgabe helfen?

Danke\n\n

<!--EDIT|jogi|1185386463-->
jubei
 2007-07-25 23:23
#78902 #78902
User since
2007-07-19
22 Artikel
BenutzerIn
[default_avatar]
wenn du weißt dass nach dem r dein gesuchter string kommt, nimm doch einfach
Code: (dl )
^r\s+(\S+)

mir ist nicht klar, warum du da alles bis 5 whitespaces matchen willst...

eine ip adresse kannst du (im einfachsten fall) mit
Code: (dl )
\s(?:\d{1,3}\.){3}\d{1,3}\s
matchen. den ausschluss, ob auch wirklich alle werte größer 0 und kleiner 256 sind, würde ich perönlich nachher machen. ein entsprechender regex ist allerdings auch nicht allzu schwer.

den port nach der ip zu matchen sollte einfach sein... hoffe, das hilft dir weiter...\n\n

<!--EDIT|jubei|1185393106-->
perlcharly
 2007-07-25 23:33
#78903 #78903
User since
2007-01-05
11 Artikel
BenutzerIn
[default_avatar]
$line =~ /^r\s(\w+)\s.*?(\d+\.\d+\.\d+\.\d+)\s\d+\s(\d+)/;
my $lefkada = $1;
my $ip = $2;
my $port = $3;
print "$lefkada - $ip - $port";

Wobei ich nicht weiß, was "lefkada" sein soll, und diesen Teil mal mit (\w+) erfasst habe.
bloonix
 2007-07-26 11:51
#78904 #78904
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=jubei,25.07.2007, 21:23]eine ip adresse kannst du (im einfachsten fall) mit
Code: (dl )
\s(?:\d{1,3}\.){3}\d{1,3}\s
matchen.[/quote]
naja, oder man gewinnt 1.000.000.000 Euro im Lotto oder so.

[quote=jubei,25.07.2007, 21:23]den ausschluss, ob auch wirklich alle werte größer 0 und kleiner 256 sind, würde ich perönlich nachher machen.[/quote]
na komm, sei net so faul :) wenn du schon eine Regex einsetzt, dann
schreib doch eine, die genau das matched was du brauchst. dann musst
du dir auch nicht die Mühe machen und nachher nochmal prüfen ob die
einzelnen Oktets richtig sind :)

Code: (dl )
1
2
3
my $octet  = q/(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})/;
my $ipaddr = qr/^($octet\.$octet\.$octet\.$octet)\z/;
my $ports  = qr/^(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[0-5]?[0-9]{4}|[0-9]{2,4}|[1-9])\z/;
\n\n

<!--EDIT|opi|1185436578-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
renee
 2007-07-26 12:05
#78905 #78905
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mit dem Ausdruck werden aber auch so Sachen wie '255.000.0.00' gefunden...

Man kann auch direkt die Ausdrücke aus CPAN:Regexp::Common::net (gehört zu CPAN:Regexp::Common) verwenden.
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/
sid burn
 2007-07-26 13:53
#78906 #78906
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=opi,26.July.2007, 09:51][quote=jubei,25.07.2007, 21:23]den ausschluss, ob auch wirklich alle werte größer 0 und kleiner 256 sind, würde ich perönlich nachher machen.[/quote]
na komm, sei net so faul :) wenn du schon eine Regex einsetzt, dann schreib doch eine, die genau das matched was du brauchst. dann musst du dir auch nicht die Mühe machen und nachher nochmal prüfen ob die einzelnen Oktets richtig sind :)[/quote]
Naja, aus Faulheit ist es leichter eben schnell "\d+\.\d+......" zu schreiben und danach einfach einfach die Zahlen in Perl zu testen. Und Geschwindigkeitmäßig ist die Sache auch noch schneller es so zu machen als eine Regex die das genau prüft. (Wenn ich dem Regulären Ausdrücke Buch von O'Reilly glaube, hab es selber noch nicht gebenchmarkt)

Und übrigens ist Faulheit eine Tugend. ;)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
jubei
 2007-07-26 14:08
#78907 #78907
User since
2007-07-19
22 Artikel
BenutzerIn
[default_avatar]
naja, soll halt jeder so machen, wie er will. ich persönlich entscheide mich halt meist für möglichst einfache ausdrücke plus ein paar simple tests, da das i.d. regel mit viel weniger anstrengung verbunden ist. sowohl beim aufstellen des ausdrucks, bei der wartung und ggf. beim debuggen. oftmals ist es außerdem gar nicht so wichtig, dass der regex "bulletproof" ist. kommt halt immer drauf an, wie gut man seinen zieltext kennt. da kann u.u. \d+\.\d+\.\d+\.\d+ schon völlig ausreichen...
bloonix
 2007-07-26 14:09
#78908 #78908
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=renee,26.07.2007, 10:05]Mit dem Ausdruck werden aber auch so Sachen wie '255.000.0.00' gefunden...

Man kann auch direkt die Ausdrücke aus CPAN:Regexp::Common::net (gehört zu CPAN:Regexp::Common) verwenden.[/quote]
Der Ausdruck unterscheidet sich nicht besonders von Regexp::Common::net
und $RE{net}[IPv4} matched ebenfalls 255.000.0.00, denn im Grunde ist
es eine gültige IPv4 Adresse.\n\n

<!--EDIT|opi|1185445341-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2007-07-26 14:19
#78909 #78909
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=sid burn,26.07.2007, 11:53]Und Geschwindigkeitmäßig ist die Sache auch noch schneller es so zu machen als eine Regex die das genau prüft.[/quote]
Das ist nicht unbedint ein Argument, denn dann dürfte man auch nicht das
Modul Regexp::Common::net benutzen, da man [s]durch den Routinenaufruf
noch langsamer wird.[/s] ebenfalls eine Regex benutzt.\n\n

<!--EDIT|opi|1185447734-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2007-07-26 14:21
#78910 #78910
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=jubei,26.07.2007, 12:08]naja, soll halt jeder so machen, wie er will.[/quote]
jep, timtowdi ;)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< >> 10 Einträge, 1 Seite



View all threads created 2007-07-25 21:59.