in reply to regex - parsing a string with many optional fields
You might also look at how Net::ICal does things.