解析 iCal 文件的技巧

Tips for parsing an iCal file

我正在尝试根据 RFC 5545 解析 iCal 输入文件。 具体来说: -属性 名字 - 可选参数,每个参数以分号“;”开头并且可能有多个逗号分隔的值(参数值可以用双引号引起来,在这种情况下它们可以包含冒号、分号和逗号) -冒号 ”:” -属性值

示例行:

> ORGANIZER;CN=Obi-WanKenobi;SENTBY="mailto:obiwan@padawan.com":mailto:laowaion@padawan.com

在这种情况下,该行将被读入缓冲区并像这样解析(当前使用 strtok): 组织者是属性名字; CN=Obi-WanKenobi和SENTBY="mailto:obiwan@padawan.com"为参数; mailto:lauwaion@padawan.com 是 属性 值。

我不知道从哪里开始。不同的输入案例几乎是无穷无尽的,我一直无法找出一种有效的算法来涵盖所有上述案例。 strtok 是要走的路吗?或者是否有另一个具有更智能解析器的 C 库?需要有人让我走上正轨。

您可以使用 flex(a GNU clone of lex) to write a lexical analyser that is tailored to your task. Ragel 是解决此问题的另一个好工具。

我建议您先查看现有的 C 实现:

以上答案解决了您的直接问题,但您可能会在逐步完成 RFC5545 标准时遇到其他问题,看看其他人所做的事情可能会有所帮助