Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Naumi
Beiträge: 68
Registriert: 11.09.2005 18:19:53
Wohnort: Jettenbach

#1 Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von Naumi »

Hi,

regular expressions sind nicht meine Freunde. Nun stehe ich aber vor einem Problem, daß ich auch nach Stunden einfach nicht auf die Reihe bekomme.

Erstmal sieht alles relativ einfach aus. Ich habe einen LDAP - DN in folgender Form

cn=Frank\,Naumann,ou=test\,1,o=test\,2,c=de

diesen DN möchte ich nun wie folgt trennen.

cn=Frank\, Naumann
ou=test\,1
o=test1\,2
c=de

Trennzeichen sind normalerweise die Kommata. Da ich aber auch im CN und im Kontext maskierte Kommata habe, fällt einfaches Trennen leider aus.

Mein Vorstellung war nun die Zeichenkette '\,' temporär umzuwandeln. Z.B in '||'
Den dann erzeugten DN: cn=Frank||Naumann,ou=test||1,o=test||2,c=de könnte ich mit split(/\,/,$DN) ohne Probleme trennen und hätte mein gewünschtes Array.
Danch würde ich '||' in den Values wieder in '\,' umwandeln und alles wäre OK.

Mein Problem ist, daß ich dieses Sch.... \, nicht umwandeln kann. Das Maskierungszeichen wird einfach nicht gefunden.


Wenn ich testweise für das Maskierungszeichen ein Anderes verwende, funktioniert mein Ausdruck.

$DN=~s/(\\\,)/\|\|/g;

Kann mir jemand helfen :geek:


Viele Grüße,
Naumi
T-REX 250, T-REX 450 S, T-REX 500, Raptor Titan, Bell 230 mit UnixExpert Mechanik
T10-Fasst

(http://www.HeliNaumi.de)
speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#2 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von speedy »

Naumi hat geschrieben:$DN=~s/(\\\,)/\|\|/g;
Hmm, also die Klammern brauchst erstmal nicht, wenn du den Wert nicht noch per $1 abfragen willst, aber das sollte egal sein. Dann ist das Komma doch glaub auch kein Zeichen für einen Regulären Ausdruck wie . oder +, sondern ein "normales" oder ? Dann kannst du zumindestens aus den 3 \ zwei machen ... aber theoretisch sollte das auch egal sein. :mrgreen:

Kannst ja mal gucken, obs hilft - aber ich überleg mal weiter.

Was mir noch grad einfällt - vielleicht kann man ja auch beim split was in der Art machen: /[^\\],/ ... also daß er alle Kommas findet, wo davor kein \ ist.


MFG,
speedy
speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#3 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von speedy »

Naumi hat geschrieben:(\\\,)
Hmm, also ich hab das grad mal im UltraEdit getestet - das Teil kann ja auch Reguläre Ausdrücke im Perlstil - da funktioniert der Ausdruck wie gewollt.
speedy hat geschrieben:/[^\\],/
Allerdings hier habe ich einen Denkfehler drin - zwar findet er nur die normalen Kommas, aber er nimmt auch das Zeichen davor mit - also bei nem split auch mit weg.

Allerdings könntest hier dann um die eckigen Klammern noch runde ... mist ... ginge zwar, aber das ist ja kein Suchen/Ersetzen beim Split ... da könntest dann beim Ersetzen dann $1 verwenden und den gefundenen Buchstaben wieder einsetzen - also so z.B. s/([^\\]),/$1xyz/ ... aber das machst da ja nicht - wobei - so könntest du die normalen Kommas durch was anderes ersetzen und dann das andere als split Zeichen(folge) nehmen - hättest ein Suchen/Ersetzen gespart.


MFG,
speedy
Benutzeravatar
Basti 205
Beiträge: 6353
Registriert: 04.09.2006 12:51:06
Wohnort: Berlin

#4 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von Basti 205 »

Du wollen Rose kaufen?
Nee, ich will nur Koffer klauen... :drunken:
DIY statt RTF
...um gottes Willen nichts nehmen was auf Anhieb funktioniert...
Benutzeravatar
duke08
Beiträge: 347
Registriert: 07.02.2008 18:39:36
Wohnort: Wendlingen am Neckar

#5 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von duke08 »

Code: Alles auswählen

$s = 'cn=Frank\,Naumann,ou=test\,1,o=test\,2,c=de';
$s =~ s/\\,/\|\|/g; 
@a = split(/,/, $s);

$r = join('#', @a);
print $r . "\n";

$r =~ s/\|\|/\\,/g;
print $r;
cn=Frank||Naumann#ou=test||1#o=test||2#c=de
cn=Frank\,Naumann#ou=test\,1#o=test\,2#c=de
So sollte das eigentlich tun was es sollte...

PS: DNs haben keine kontextfreie Grammtik, das "Parsen" via RegEx tut unter bestimmten Bedingungen nicht richtig:

cn="a,b"
cn=a\\,b

Gruß
Sascha
  • robbe Moskito Basic/Sport
  • Align T-Rex 250, 450SE 3Digi-FBL, 500 CF-FBL
  • Outrage Fusion 50 FBL
  • Parkzone Corsair, HK EuroFighter 2000 RIP Resurrected

speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#6 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von speedy »

duke08 hat geschrieben:cn="a,b"
cn=a\\,b
Was nu - ist da letztendlich ein \ in der reinkommenden Zeichenkette wie oben oder zwei wie bei dir ?


MFG,
speedy
Benutzeravatar
duke08
Beiträge: 347
Registriert: 07.02.2008 18:39:36
Wohnort: Wendlingen am Neckar

#7 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von duke08 »

Wenn Anführungszeichen drumherum sind, muss das Komma nicht escaped werden. Das zweite Beispiel ist tatsächlich falsch, es sollte

cn=a\\,ou=b

heißen. Also ein einzelner (geschützter) Backslash am Schluss. Ist aber tatsächlich nur ein theoretisches Beispiel, wird so wohl nicht vorkommen.

Gruß
Sascha
  • robbe Moskito Basic/Sport
  • Align T-Rex 250, 450SE 3Digi-FBL, 500 CF-FBL
  • Outrage Fusion 50 FBL
  • Parkzone Corsair, HK EuroFighter 2000 RIP Resurrected

Benutzeravatar
adrock
Beiträge: 1527
Registriert: 02.04.2008 11:00:26
Wohnort: Berlin

#8 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von adrock »

speedy hat geschrieben:
duke08 hat geschrieben:cn="a,b"
cn=a\\,b
Was nu - ist da letztendlich ein \ in der reinkommenden Zeichenkette wie oben oder zwei wie bei dir ?
Ich denke das zweite sollte nur ein Beispiel für einen DN sein, bei dem der Regex nicht so funktioniert... das parsen ist in der Tat nicht so einfach :wink: Früher in "Compilerbau" hätten wir dafür eine Zustandsmaschine o.ä. programmiert :alien:

Ciao...
Markus

Stryker F-27Q Titan X50E Pterodactyl
Diverse FPV Copter
RC: MC-20 HoTT
speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#9 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von speedy »

duke08 hat geschrieben:cn=a\\,ou=b

heißen. Also ein einzelner (geschützter) Backslash am Schluss. Ist aber tatsächlich nur ein theoretisches Beispiel, wird so wohl nicht vorkommen.
Jetzt bin ich erst recht verwirrt :) - naumi hat doch normale Komma verwendet, um die Einträge zu trennen - und nen Backslash vor dem Komma, wenn das ein echtes Komma in nem Eintrag ist.


MFG,
speedy
Benutzeravatar
adrock
Beiträge: 1527
Registriert: 02.04.2008 11:00:26
Wohnort: Berlin

#10 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von adrock »

speedy hat geschrieben:
duke08 hat geschrieben:cn=a\\,ou=b

heißen. Also ein einzelner (geschützter) Backslash am Schluss. Ist aber tatsächlich nur ein theoretisches Beispiel, wird so wohl nicht vorkommen.
Jetzt bin ich erst recht verwirrt :) - naumi hat doch normale Komma verwendet, um die Einträge zu trennen - und nen Backslash vor dem Komma, wenn das ein echtes Komma in nem Eintrag ist.
Ja, aber \\ würde bedeuten, das dann ein einfacher \ übrig bleiben soll vor dem "echten" Trennkomma. Dein Regex-Parser würde aber das Komma ignorieren, da er denkt "\," -> Komma ignorieren

Ciao...
Markus

Stryker F-27Q Titan X50E Pterodactyl
Diverse FPV Copter
RC: MC-20 HoTT
speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#11 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von speedy »

adrock hat geschrieben:aber \\ würde bedeuten, das dann ein einfacher \ übrig bleiben soll
Das ist klar.
adrock hat geschrieben:das dann ein einfacher \ übrig bleiben soll vor dem "echten" Trennkomma
Aber da steht doch garkein Backslash vor dem Trennkomma, sondern nur bei den Zeichenkettenkommas. :dontknow:

Oder ist der reinkommende String da oben von naumi falsch dargestellt und es gehören da noch paar mehr Backslashes rein ?


MFG,
speedy
Naumi
Beiträge: 68
Registriert: 11.09.2005 18:19:53
Wohnort: Jettenbach

#12 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von Naumi »

Hi,

der String ist das Ergebnis eines LDAP Searches via PERL LDAP-Modul. LDAP maskiert 'Echte Kommata' mit einem Backslash. Die Trennung der Kontexte geschieht durch einfache Kommata.

cn=Frank\,Naumann,ou=test\,1,o=test\,2,c=de

ist also korrekt.

MfG,
Naumi
T-REX 250, T-REX 450 S, T-REX 500, Raptor Titan, Bell 230 mit UnixExpert Mechanik
T10-Fasst

(http://www.HeliNaumi.de)
Benutzeravatar
adrock
Beiträge: 1527
Registriert: 02.04.2008 11:00:26
Wohnort: Berlin

#13 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von adrock »

speedy hat geschrieben: Oder ist der reinkommende String da oben von naumi falsch dargestellt und es gehören da noch paar mehr Backslashes rein ?
Wenn im DN selbst ein "\" vorkommen würde, würde es bei der Abfrage/Ausgabe durch "\\" dargestellt werden. Wenn das nun zufällig am Ende einer Komponente der Fall wäre, würde das Komma danach verschluckt bzw. nicht als Trennzeichen interpretiert weden, weil die Expression "^[\\]," nicht matchen würde, was sie aber eigentlich an der Stelle sollte.

Ciao..
Markus

Stryker F-27Q Titan X50E Pterodactyl
Diverse FPV Copter
RC: MC-20 HoTT
speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#14 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von speedy »

Ah .... ich glaub jetzt hats Klick gemacht, was Sascha sagen wollte :D

... hatte irgendwie übersehen, daß das ein Beispiel für einen theoretisch vorkommenden Fall sein soll, wenn am Ende eines Eintrages nen Backslash kommt. :oops:

Ich war beim ersten Beispiel davon ausgegangen, daß das ein echtes Komma in einem Eintrag ist - und dann hat mich der Rest verwirrt.


Aber jetzt zum eigentlichen Problem ...

funktioniert es denn jetzt naumi ?


Weil - das was Sascha verwendet hat als RegEx und ich ja auch schon dadrüber beschrieben hatte ... ist ja eigentlich das Gleiche, wie naumi ausprobiert hatte, nur mit ein paar nicht benötigten Zeichen mehr.


MFG,
speedy
Naumi
Beiträge: 68
Registriert: 11.09.2005 18:19:53
Wohnort: Jettenbach

#15 Re: Reguläre Ausdrücke - Probleme mit Maskierungszeichen (PERL)

Beitrag von Naumi »

Hi Speedy,

bin im Moment bei meinem Pappi am PC und kann es deshalb leider nicht ausprobieren. Mein Internetzugang hat ein Problem und die Telekom bekommt es nicht gebacken.

Ich werde es gleich morgen früh auf der Arbeit ausprobieren und mich melden.

Vielen Dank und Grüße !!!!
Naumi
T-REX 250, T-REX 450 S, T-REX 500, Raptor Titan, Bell 230 mit UnixExpert Mechanik
T10-Fasst

(http://www.HeliNaumi.de)
Antworten

Zurück zu „Klönschnack“