Reguläre Ausdrücke
am 08.01.2007 13:11:48 von ronny.kluge
Hallo zusammen,
1
wie ist es möglich mit regulären Ausdrücken nach Strings zu suchen
die Sonderzeichen enthalten ?
Bsp:
$a =3D "test a() \";
$b =3D "kawssiflail test a() \ rtuuis";
if ($b =3D~ /$a/) ....
____________________________________________________________ _______________=
______
2
Wie erhalte ich aus der folgenden Zeile den String
"PC52072\Administrator:(OI)(CI)F" ? :
$string =3D "C:\test\Neuer Ordner PC52072\Administrator:(OI)(CI)F";
Per $string =3D~ / (.*?)\\(.*?)\:(.*?)/; erhalte ich "Ordner
PC52072\Administrator:(OI)(CI)F" ...
Danke, Gruß, Ronny.
Re: Reguläre Ausdrücke
am 08.01.2007 13:33:33 von Stephan Grein
zu 1)
entweder literalen Text mit \Qliteraler Text\E einbinden, oder Escapen.
zu 2)
probier mal bisschen rum, du findest bestimmt eine Lösung. :)
HTH,
--
Stephan Grein,
https://stephan-rockt.de
GnuPG-Key-ID: 0xF8C275D4
FingerPrint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Re: Reguläre Ausdrücke
am 08.01.2007 17:01:59 von Helmut Wollmersdorfer
ronny.kluge@barmenia.de wrote:
> Wie erhalte ich aus der folgenden Zeile den String
> "PC52072\Administrator:(OI)(CI)F" ? :
> $string = "C:\test\Neuer Ordner PC52072\Administrator:(OI)(CI)F";
> Per $string =~ / (.*?)\\(.*?)\:(.*?)/; erhalte ich "Ordner
> PC52072\Administrator:(OI)(CI)F" ...
z.B.
$string =~ /Neuer\s+Ordner\s+(.*)/;
wenn da immer 'Neuer Ordner ' drinsteht.
Helmut Wollmersdorfer
Re: Reguläre Ausdrücke
am 09.01.2007 11:31:16 von Bianka Martinovic
ronny.kluge@barmenia.de schrieb:
> Wie erhalte ich aus der folgenden Zeile den String
> "PC52072\Administrator:(OI)(CI)F" ? :
>
> $string = "C:\test\Neuer Ordner PC52072\Administrator:(OI)(CI)F";
>
> Per $string =~ / (.*?)\\(.*?)\:(.*?)/; erhalte ich "Ordner
> PC52072\Administrator:(OI)(CI)F" ...
Hallo Ronny,
das liegt daran, dass sozusagen nach dem ersten Leerzeichen, gefolgt von
irgendwas, gefolgt von \ gesucht wird.
Folgendes kleines Testprogramm liefert mir, was Du suchst:
my $regexp = qr{(\w+\\\w+:.*)};
my $string = 'C:\test\Neuer Ordner PC52072\Administrator:(OI)(CI)F';
print "STRING: $string\nREGEXP: $regexp\n";
if ( $string =~ /$regexp/ ) {
print "FOUND: $1\n\n";
}
Ausgabe:
STRING: C:\test\Neuer Ordner PC52072\Administrator:(OI)(CI)F
REGEXP: (?-xism:(\w+\\\w+:.*))
FOUND: PC52072\Administrator:(OI)(CI)F
Der RegExp sagt: Suche Wortzeichen, gefolgt von \, gefolgt von
Wortzeichen, gefolgt von :, gefolgt von irgendwas. Da Wortzeichen keine
Leerzeichen beinhalten, wird wie gewünscht gefiltert. Funktioniert aus
dem gleichen Grund natürlich nur, wenn immer ein Leerzeichen wie im
Beispiel vorhanden ist!
Ggfs. mußt Du also den Anfang anders filtern, wenn diese Bedingung nicht
zutrifft. Z. B. wenn es immer 'PC' heißt:
my $regexp = qr{(PC\d+\\\w+:.*)};
Gruß, Bianka
Re: Reguläre Ausdrücke
am 11.01.2007 10:43:53 von ronny.kluge
Bianka Martinovic schrieb:
> Folgendes kleines Testprogramm liefert mir, was Du suchst:
>
> my $regexp =3D qr{(\w+\\\w+:.*)};
> my $string =3D 'C:\test\Neuer Ordner PC52072\Administrator:(OI)(CI)F';
>
> print "STRING: $string\nREGEXP: $regexp\n";
> if ( $string =3D~ /$regexp/ ) {
> print "FOUND: $1\n\n";
> }
>
> Ausgabe:
>
> STRING: C:\test\Neuer Ordner PC52072\Administrator:(OI)(CI)F
> REGEXP: (?-xism:(\w+\\\w+:.*))
> FOUND: PC52072\Administrator:(OI)(CI)F
>
> Gruß, Bianka
Hallo Bianka,
vielen Dank für die ausführliche Antwort,echt klasse / klappt super!
Gruß, Ronny.