regulärer Ausdruck, parsen von \ und "

hpvw

Erfahrenes Mitglied
Hallo liebe Helfer, ich weiß einfach nicht mehr weiter.
Ich bin dabei, folgenden String mit regulären Ausdrücken zu parsen:
Code:
 variable1="irgendEinText" variable2="noch ein Text" variable3=variable4
Dazu benutze ich diesen regulären Ausdruck:
Code:
"/ ([a-zA-Z0-9_]+)=([\"](()|(.*?[^\\\\]))[\"]|[a-zA-Z0-9_]+)/"
Er gibt mir mit preg_match_all() immer die Pärchen von Variable und der Zuweisung.
Soweit so gut. Er teilt mir das wunderbar in die Variablennamen und die Zuweisung auf.
Wie man vielleicht sieht, habe ich versucht, ein Anführungszeichen " als \" darzustellen.
Das klappt auch. Dazu muss ich ein Backslash als \\ darstellen. Klappt fast.
Hier bin ich jetzt bei meinem Problem. Ich habe einen leeren Text in der Zuweisung schon zugelassen, als Sonderfall, da
Code:
[^\\\\]
zwingend ein Zeichen verlangt, es jedoch kein \ sein darf (es sind 4 Backlashes, um einmal für PHP zu Escapen und dann für den regulären Ausdruck, der Fehler hatte mich schon über 2 Stunden gekostet).
Was nicht funktioniert, ist folgender Eingabestring:
Code:
 variable1="Ein Text der komisch endet\\"
Ein Backslash kann ich am Ende also nicht einfügen, dann produziert er Blödsinn.
Ich habe auch schon versucht, dass noch als Sonderfall abzutun:
Code:
"/ ([a-zA-Z0-9_]+)=([\"](()|(.*?(\\\\\\\\)*?)|(.*?[^\\\\]))[\"]|[a-zA-Z0-9_]+)/"
Dann bricht er jedoch schon vor dem Anführungszeichen ab, wenn ich so einen Eingabestring habe:
Code:
 variable1="Das ist ein \"Zitat\" von mir."
Als Inhalt erhalte ich dann
Code:
Das ist ein \
Was rauskommen sollte ist jedoch:
Code:
Das ist ein \"Zitat\" von mir.
Die escapten Zeichen werden dabei später im Script ersetzt.
Diverse Abwandlungen habe ich auch versucht, aber die funktionierten noch weniger.

Kann mir jemand einen Tipp geben?

Gruß hpvw
 
Arrgh,
manchmal fehlts irgendwie an der richtigen Idee.
So gehts:
PHP:
"/ ([a-zA-Z0-9_]+)=([\"](()|(.*?[^\\\\])|(.*?([\\\\][\\\\])+?))[\"]|[a-zA-Z0-9_]+)/"
Die Reihenfolge der ODER-Ausdrücke ist ebenso wichtig, wie das +? anstatt dem *?.
Ich habe jetzt noch getestet, wie verrückt und bisher keine Sonderfälle gefunden, die er falsch,bzw. nicht so, wie ich es will, interpretiert.
War 'ne lange Nacht, aber es hat sich gelohnt, der Tag wird fürchterlich ... Gähn.

Gruß hpvw
 
Zurück