Reguläre Ausdrücke

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.