Reguläre Ausdrücke

Hallo zusammen,

1=2E

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=2E

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.
ronny.kluge [ Mo, 08 Januar 2007 13:11 ] [ ID #1588962 ]

Re: Reguläre Ausdrücke

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, <stephan at stephan minus rockt dot de>
https://stephan-rockt.de
GnuPG-Key-ID: 0xF8C275D4
FingerPrint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Stephan Grein [ Mo, 08 Januar 2007 13:33 ] [ ID #1588964 ]

Re: Reguläre Ausdrücke

ronny.kluge [at] 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
Helmut Wollmersdorfer [ Mo, 08 Januar 2007 17:01 ] [ ID #1588965 ]

Re: Reguläre Ausdrücke

ronny.kluge [at] 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<Zahlen>' heißt:

my $regexp = qr{(PC\d+\\\w+:.*)};

Gruß, Bianka
Bianka Martinovic [ Di, 09 Januar 2007 11:31 ] [ ID #1590084 ]

Re: Reguläre Ausdrücke

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.
ronny.kluge [ Do, 11 Januar 2007 10:43 ] [ ID #1592685 ]
Perl » de.comp.lang.perl.misc » Reguläre Ausdrücke

Vorheriges Thema: KEY_Fx in Curses nicht drin?
Nächstes Thema: Paket-Wirrniss: Wo liegt mein trivialer Fehler?