Domanda

Sto cercando di scrivere una classe in grado di analizzare un file iCalendar e sto colpendo alcuni muri di mattoni. Ogni linea può essere nel formato:

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

E 'abbastanza facile da analizzare sia con un mazzo di gruppi o regex di fino a scoprire che i valori possono avere le virgole backticked, anche loro possono essere virgolette marcato che rende la vita difficile. per esempio:

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

In questo esempio si sono destinati a tirare fuori i tre valori:

  • il mio, il valore fredda
  • Valore, 2
  • valore3

che lo rende un po 'più difficile.

Suggerimenti?

È stato utile?

Soluzione

Passare attraverso il file char da char e dividere i valori manualmente, ogni volta che avete una virgoletta si entra in modalità "citazione" in cui non sarà diviso in virgole e quando le virgolette di chiusura viene si lascia.

Per le virgole backticked:. Se si legge in una barra di leggere anche il carattere successivo e decidere che cosa fare con esso poi

Certo che non è estremamente efficiente, ma non è possibile utilizzare le espressioni regolari per questo. Voglio dire si può, ma perché credo che non ci può anche essere sfuggito virgolette questo sta per essere davvero disordinato.

Se si vuole fare un tentativo però:

  • cominciamo facendo corrispondere un segno di virgolette seguito da caratteri che non sono: "[^"]*"
  • per superare il problema dei caratteri di escape è possibile utilizzare lookaheads (?<!\\)"[^"]*(?<!\\)"
  • ora si romperà se virgolette sfuggiti sono di valore, forse questo funziona? (Non hanno provato) (?<!\\)"[^"|(?<=\\)"]*(?<!\\)"

Quindi, si vede molto veloce di disordinato ottenere, quindi vorrei suggerire a voi di leggere in a caratteri.

Altri suggerimenti

Ho avuto gli stessi problemi. L'ho trovato un po 'difficile da girare 'qualsiasi' iCalendar file in una struttura oggetto utilizzabile PHP / array, così invece ho cercato di convertire iCalendar per xCal.

Questa è la mia implementazione:

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

Devo dire che questo script non è completamente testato, ma potrebbe essere sufficiente per ottenere il vostro iniziato.

Hai provato tirando fuori qualcosa di http://phpicalendar.net/ ?

E 'questo il progetto che stai pensando di? Sono l'auther :) La prima versione utilizzabile (v0.1.0) dovrebbe essere pronto in circa un mese. E 'in grado di lavorare con circa l'85% della specifica iCalendar in questo momento, ma gli eventi ricorrenti sono davvero dura. Sto lavorando su di loro in questo momento. Una volta completato tali verifiche, la biblioteca sarà perfettamente in grado di fare qualsiasi cosa nelle specifiche.

Qcal Google Code Homepage

Enjoy!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top