在php中解析iCalendar字符串的最佳方法

时间:2009-12-04 05:59:47

标签: php parsing icalendar

我正在尝试编写一个可以解析iCalendar文件的类,并且正在敲击一些砖墙。每行可以采用以下格式:

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

使用一堆拆分或正则表达式解析非常容易,直到你发现值可以有反引号的逗号,它们也可以是双引号标记,这会让生活变得艰难。例如:

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

在这个例子中,你想要取出三个值:

  • 我的,很酷的价值
  • 值,2
  • 值3

这使得它变得更加困难。

建议?

4 个答案:

答案 0 :(得分:3)

通过char查看文件char并手动分割值,只要你有一个引号,你输入“引用模式”,你不会用逗号分割,当你关闭引号时,你就离开它。

对于反引号的逗号:如果你用反斜杠阅读,你还会阅读下一个字符并决定如何处理它。

当然这不是非常有效,但你不能使用正则表达式。我的意思是你可以,但由于我相信也可以通过引号转义,这将是非常混乱的。

如果你想尝试一下:

  • 让我们首先匹配引号,然后匹配不是"[^"]*"
  • 的字符
  • 要克服转义字符的问题,您可以使用前瞻(?<!\\)"[^"]*(?<!\\)"
  • 现在如果转义引号出现在值中会破坏,这可能有效吗?(尚未测试过)(?<!\\)"[^"|(?<=\\)"]*(?<!\\)"

所以你看得很快就会变得凌乱,所以我建议你以字面的方式阅读它。

答案 1 :(得分:1)

我遇到了同样的问题。我发现将'任意'iCalendar文件转换为可用的PHP对象/数组结构有点困难,所以我一直试图将iCalendar转换为xCal。

这是我的实施:

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

我必须说这个脚本没有经过全面测试,但它可能足以让你开始。

答案 2 :(得分:0)

你有没有试过从http://phpicalendar.net/中抽出一些东西?

答案 3 :(得分:0)

这是您正在考虑的项目吗?我是其他人:)第一个可用的版本(v0.1.0)应该在大约一个月内就绪。它现在能够处理大约85%的iCalendar规范,但重复发生的事件真的很难。我现在正在研究它们。一旦完成,图书馆将完全能够在规范中做任何事情。

qCal Google Code Homepage

享受!