Frage

Ich versuche, eine Klasse zu schreiben, die eine iCalendar-Datei analysieren können und einige Ziegelwände sind zu schlagen. Jede Zeile kann im Format:

PARAMETER[;PARAM_PROPERTY..]:VALUE[,VALUE2..]

Es ist ziemlich einfach entweder mit einem Bündel von Splits oder regex ist zu analysieren, bis Sie herausfinden, dass Werte backticked Kommas haben können, können sie auch doppelte Anführungszeichen sein markiert, die das Leben schwer macht. zum Beispiel:

PARAMETER:"my , cool, value",value\,2,value3

In diesem Beispiel Sie sollen, ziehen Sie die drei Werte:

  • meine, cool Wert
  • Wert, 2
  • value3

Was macht es ein wenig schwieriger.

Verbesserungsvorschläge?

War es hilfreich?

Lösung

Gehen Sie durch die Datei char von char und teilen Sie die Werte manuell, wenn Sie ein Anführungszeichen haben Sie eingeben „Zitat-Modus“, wo man nicht auf Kommas geteilt und wenn die schließenden Anführungszeichen kommt Sie verlassen es.

Für das backticked Komma. Wenn Sie in einem umgekehrten Schrägstrich lesen lesen Sie auch das nächste Zeichen und entscheiden, was dann mit ihm zu tun

Natürlich ist das nicht sehr effizient ist, aber Sie können keine regulären Ausdrücke für diese. Ich meine, Sie können, aber da ich glaube, dass es auch Anführungszeichen dies sein wird, wirklich chaotisch entkommen werden kann.

Wenn Sie wollen, dass es einen Versuch geben aber:

  • Lassen Sie uns beginnen, indem ein Anführungszeichen von Zeichen gefolgt passend, die nicht: "[^"]*"
  • das Problem der Escape-Zeichen überwinden Sie verwenden können, Lookaheads (?<!\\)"[^"]*(?<!\\)"
  • jetzt bricht es, wenn entkam Anführungszeichen in dem Wert sind, vielleicht funktioniert das? (Habe es nicht getestet) (?<!\\)"[^"|(?<=\\)"]*(?<!\\)"

Sie sehen also, es sehr schnell bekommen ist chaotisch, so würde ich vorschlagen, Sie es in charakterlich zu lesen.

Andere Tipps

Ich hatte die gleichen Probleme. Ich fand es ein bisschen schwer zu drehen ‚jede‘ iCalendar-Datei in eine nutzbaren PHP Objekt / Array-Struktur, so dass anstelle Ich habe versucht, iCalendar zu xcal zu konvertieren.

Dies ist meine Implementierung:

http: / /code.google.com/p/sabredav/source/browse/branches/caldav/lib/Sabre/CalDAV/ICalendarToXML.php

Ich muß sagen, dass dieses Skript nicht vollständig getestet, aber es könnte sein, genug, um Ihren Start.

Haben Sie versucht, etwas aus http://phpicalendar.net/ ?

Ziehen

Ist dies das Projekt, das Sie von jetzt denken? Ich bin der auther :) Die erste brauchbare Version (v0.1.0) soll in etwa einem Monat fertig sein. Es ist in der Lage jetzt mit etwa 85% der iCalendar-Spezifikation arbeiten, aber wiederkehrende Ereignisse sind wirklich hart. Ich arbeite jetzt auf sich. Sobald diese abgeschlossen sind, wird die Bibliothek vollständig in der Lage sein, irgendetwas in der Spezifikation zu tun.

QCAL Google Code Homepage

Genießen Sie!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top