vCard 4.0 正则表达式
不久前,我创建了一个程序来处理 vCard 文件。这实际上可以通过以下方式完美完成:
(?<FIELD>[^\s:;]+)(;(?<PARAM>[^:]+))*:(?<CONTENT>.*(?>\r\n[ \t].*)*)$
但是,这不适用于新的(2011 年 8 月)vCard 4.0 标准。问题是 vCard 4.0 文件使用以下布局:
FIELD(:)(;([PARAMETER]="[CONTENT],[MORE CONTENT]"(;))[DATATYPE(:)]:)CONTENT[newline]
例如,
ADR;type="home,work":(address)
如您所见,我想捕获整个参数,包括 type="..." 内容。
所以我的问题是:我的代码是否可以修改,或者我是否必须编写两个进程(一个用于旧类型,一个用于新的 4.0 版本;理想情况下,我想支持两者),如果可以,如何编写? (顺便说一句,我正在使用 c# 和 .net 4.0)。
问候。
a while ago, I created a program to process vCard files. This could be done virtually perfectly with the following:
(?<FIELD>[^\s:;]+)(;(?<PARAM>[^:]+))*:(?<CONTENT>.*(?>\r\n[ \t].*)*)$
However, this doesn't work for the new (August 2011) vCard 4.0 standard. The problem is that vCard 4.0 files use the following layout:
FIELD(:)(;([PARAMETER]="[CONTENT],[MORE CONTENT]"(;))[DATATYPE(:)]:)CONTENT[newline]
e.g.
ADR;type="home,work":(address)
As you can see, I would like to capture the whole parameter, including the type="..." stuff.
So my question is: can my code be modified or will I have to write two processes (one for the old types and one for the new 4.0 version; ideally, I would like to support both) and if so, how? (I'm using c# and .net 4.0 by the way).
Regards.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试以下正则表达式:
该查询似乎可以处理此处提供的 vCard 3.0 示例:
以及4.0 示例:
它也与 vCard 4.0 规范 此处:
我的免责声明是,我在 vCard 方面没有任何专业知识,我只是浏览了规范的一部分并在使用 RegExr 所以我可能错过了一些边缘情况。
Try the following regex:
That query seems to handle both the vCard 3.0 example provided here:
And the 4.0 example:
It also matches this example from the vCard 4.0 Specification here:
My disclaimer is that I don't have any expertise in vCard specifically, I just skimmed a portion of the spec and looked at examples while playing around with RegExr so it's possible that I'm missing some edge cases.