hektor pascal: REGEX Ical

Beitrag lesen

Hi Forum,
gegeben sei folgender Text (Das hier ist natürlich nur ein Auszug.):

  
BEGIN:VEVENT  
DTSTART;VALUE=DATE:20120621  
DTEND;VALUE=DATE:20120622  
RRULE:FREQ=YEARLY;BYMONTH=6;BYMONTHDAY=21  
DTSTAMP:20120703T080230Z  
UID:DBEA2E86EBA4444DA2F456A266B1C83F00000000000000000000000000000000  
CREATED:20120621T163508Z  
DESCRIPTION:  
LAST-MODIFIED:20120621T163508Z  
SEQUENCE:1  
STATUS:CONFIRMED  
SUMMARY:################  
TRANSP:OPAQUE  
CATEGORIES:http://schemas.google.com/g/2005#event  
BEGIN:VALARM  
ACTION:DISPLAY  
DESCRIPTION:This is an event reminder  
TRIGGER;VALUE=DATE-TIME:20120620T000000Z  
END:VALARM  
END:VEVENT  

Dieser Text kommt jetzt X-Mal vor und ich möchte nur das haben was jeweils zwischen BEGIN:VEVENT und END:VEVENT steht. Dies versuche ich Mit einem REGEX, welcher sich allerdings meiner Ansicht komisch verhält.

Hier der ursprüngliche Versuch, welcher aber komplett scheitert ;).

  
<?  
  
  preg_match_all('/BEGIN:(VEVENT)([^(?:END:\1)]*)END:\1/si',file_get_contents('/test/basic.ics'),$matches);  
  
  print_r($matches);  
  
?>  
  

Um der Sache auf die Spur zu kommen, wollte ich die Sache von vorne aufrollen und erst mal testen was alles kommt wenn ich von BEGIN:VEVENT alles bis zum nächsten BEGIN erfasse:

  
<?  
  
  preg_match_all('/BEGIN:(VEVENT)([^(?:BEGIN)]*)/si',file_get_contents('/root/basic.ics'),$matches);  
  
  print_r($matches);  
  
?>  

Doch jetzt wird es komisch und für mich nicht mehr nachvollziehbar. Hier die Ausgabe:

  
Array  
(  
    [0] => Array  
        (  
            [0] => BEGIN:VEVENT  
DTSTART;VALU  
        )  
  
    [1] => Array  
        (  
            [0] => VEVENT  
        )  
  
    [2] => Array  
        (  
            [0] =>  
DTSTART;VALU  
  
        )  
  
)  
  

Warum gibt es nur den Test DTSTART;VALU aus? Dahinter steht doch gar kein BEGIN.

MFG Hektor