【发布时间】:2012-10-17 05:08:09
【问题描述】:
我正在尝试使用正则表达式解析 iCalendar (RFC2445) 输入。
下面是输入的 [简化] 示例:
BEGIN:VEVENT
abc:123
def:456
END:VEVENT
BEGIN:VEVENT
ghi:789
END:VEVENT
我想要一个匹配数组:“外部”匹配是每个 VEVENT 块,内部匹配是每个字段:值对。
我已经尝试过这种变体:
BEGIN:VEVENT\n((?<field>(?<name>\S+):\s*(?<value>\S+)\n)+?)END:VEVENT
但是考虑到上面的输入,结果似乎每个匹配的 VEVENT 只有一个字段,尽管 +?在捕获组上:
**Match 1**
field def:456
name def
value 456
**Match 2**
field ghi:789
name ghi
value 789
在第一场比赛中,我希望有两个字段:abc:123 和 def:456 匹配...
我确定这是一个新手错误(因为在正则表达式方面我似乎永远是一个新手......) - 但也许你可以指出我正确的方向?
谢谢!
【问题讨论】:
-
你为什么要自己解析这个而不是使用像github.com/sdague/icalendar#readme这样的gem?
-
很好的问题:事实证明我(目前)正在使用 ri_cal(另一个伟大的宝石)但是:1)它构建了所有事件的完整内存表示,这是一个巨大的东西 - 我只需要解析单个项目,并且 2)我的输入文件通常是伪造的,而 gems 往往难以处理这些。但事实上,这是我目前的方法,所以你是正确的。
标签: ruby regex icalendar rfc2445 rfc5545