Einzelnen Beitrag anzeigen

Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

RegEx - Ich steig da nicht durch...

  Alt 20. Apr 2009, 20:47
Hi ihr,

als Folge aus meinem letzten Thread habe ich jetzt mal die Zeit gefunden, mich um meinen OSM-Extractor zu kümmern. Die Klasse für die Datenbank ist aufgesetzt und wartet begierig darauf, endlich mit Daten gefüttert zu werden.

Ich hatte dunkel im Kopf, dass es für Delphi eine RegEx-Implementation gab, und, tadaa, ich hab sie auch gefunden.

Ein simpler Speedtest zwischen TRegExpr und PosEx brachte zumindest bei der Suche des Ausdrucks "<node" zu Tage, dass TRegExpr schneller ist. Also bieten sich reguläre Ausdrücke an.

Nun, den Kurs auf Regenechsen habe ich schon durch, die Syntax-Beschreibung zu der Komponente auch. Aber ich bekomme es nicht hin. Ich habe schon die unterschiedlichsten Kombinationen durchprobiert.

Dabei möchte ich eigentlich nur folgendes:

XML-Code:
<node id="297497923" lat="54.3298467" lon="10.053805" user="seawolff" visible="true" timestamp="2009-01-25T20:36:37+00:00"/>

<node id="303856929" lat="54.3283192" lon="10.0530744" user="desc" visible="true" timestamp="2008-11-16T12:43:49+00:00">
 <tag k="highway" v="turning_circle"/>
</node>

<way id="27730376" visible="true" timestamp="2009-01-01T20:19:47+00:00" user="nhoffm">
 <nd ref="304510582"/>
 <nd ref="304510583"/>
 <nd ref="304510584"/>
 <nd ref="304510585"/>
 <nd ref="304510586"/>
 <tag k="name" v="Kongsbergweg"/>
 <tag k="created_by" v="Potlatch 0.10f"/>
 <tag k="highway" v="footway"/>
</way>
Wie man sieht, gibt es eigentlich drei Möglichkeiten:
  • Entweder endet der Knoten mit einem "/>", oder
  • es befindet sich beim "node" - Knoten noch ein oder mehrere Elemente dazwischen, oder
  • es gibt einen anderen Tag, mit entsprechenden Unterelemente dazwischen

Ich verlange von dem Ausdruck ja nichtmal, dass er mir alles auflistet. Schön wäre, wenn der Ausdruck / die Ausdrücke folgende Aufgaben erfüllen könnten:
  • Gebe mir alles, was zwischen <node /> liegt.
  • Sollte "/>" nicht existieren, dann gib mir alles, was zwischen <node></node> liegt.
  • Gib mir alles, was zwischen <way></way> liegt.

Ich habe fast die Befürchtung, dass das Statement / die Statements so dermaßen komplex werden würde, dass es eigentlich gar nicht zu realisieren ist. Hat jemand ne Idee, wie ein entsprechendes Statement aussehen könnte?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat