String Seperation (boost::escaped_list_separator)

PhilippGer

Mitglied
String Separation (boost::escaped_list_separator)

Hi!

Ich habe folgendes Problem:
Ich muss mehrere Ausdrücke der Form ' eins.zwei == "irgendeinstring" ' bzw. ' eins.zwei == [ "Dies ist String 1", "Dies ist String 2" ] ' parsen.

"eis.zwei" ist eine Adresse und hier eher unbedeutend
"==" ist einer von mehreren Operatoren.

Das letzte ist entweder ein einzelner String oder eine Liste von Strings in eckigen Klammern gefasst.


Zum Parsen trenne ich den gesamten String nun anhand der '&' Zeichen in die einzelnen Ausdrücke auf.
Danach wird jeder Ausdruck in Adresse, Operator und Operand zerlegt.

Da in den Strings selber wieder '&'-Zeichen stehen, benutze ich boost::escaped_list_separator um '&'-Zeichen zwischen Quotes zu ignorieren.

Das Auftrennen in die einzelnen Ausdrücke klappt also.

Allerdings löscht boost::escaped_list_separator die Quotes!
Dadurch wird es, wenn ich mir den Operanden dann ansehe, unmöglich die Strings zu trennen.

' eins.zwei == [ "Karl &", "- Heinz" ] '

Liefert dann folgenden Operanden: '[ Karl &, - Heinz ]'
Ich weiß also nicht mehr wo der erste String aufhört und der zweite beginnt.

Weiß jemand Rat?
 
Zuletzt bearbeitet:
Hi.

Vermutlich hat das Forum da irgendwelche Zeichen entfernt, oder ich verstehe nicht ganz was du mit "anhand der '&' Zeichen" auftrennen meinst?! :confused:

Hast du dir mal Boost.Spirit angeschaut?

Gruß
 
Nein, ist alles drin... ich habe mich vermutlich etwas falsch ausgedrückt.

Hier mal ein beispiel:

father.son1 == ["Hans", "Peter"] && father.son2 == ["Hans && Peter", "Peter && Paul"]

Wenn ich nun die escaped List benutze, trennt boost das korrekt in 2 Ausdrücke:
father.son1 == [Hans, Peter]
und
father.son2 == [Hans && Peter, Peter && Paul]

Allerdings werden dadurch sämtliche Anführungszeichen entfernt.

Sprich, ich kann in den Klammern nicht mehr feststellen, was genau die ursprünglich in Anführungszeichen gefassten Strings waren.

Boost Spirit hatte ich mir dazu noch nicht angesehen.
Wird aber jetzt mal nach geholt.
 
Zurück