vCard文件解析 - 正则

2018-06-15  本文已影响0人  素还真人

主讲一下,区别于其他博客的vCard文件解析,一种通用的解析方式 -

正则!!!

一开始也是毛都不知道,啥时vCard??

其实就是通讯录中,某一个联系人导出时生成的vcf文件。

其导出文件(如xiaoming.vcf)文本展现如下:

BEGIN:VCARD

VERSION:4.0

N:xiaoming

FN:Forrest Gump

ORG:Bubba Gump Shrimp Co.

TITLE:Shrimp Man

PHOTO;MEDIATYPE=image/gif:http://www.example.com/dir_photos/my_photo.gif

TEL;TYPE=work,voice;VALUE=uri:tel:+1-111-555-1212

TEL;TYPE=home,voice;VALUE=uri:tel:+1-404-555-1212

ADR;TYPE=WORK;PREF=1;LABEL="100 Waters Edge\nBaytown\, LA 30314\nUnited States of America":;;100 Waters Edge;Baytown;LA;30314;United States of America

ADR;TYPE=HOME;LABEL="42 Plantation St.\nBaytown\, LA 30314\nUnited States of America":;;42 Plantation St.;Baytown;LA;30314;United States of America

EMAIL:forrestgump@example.com

REV:20080424T195243Z

x-qq:21588891

END:VCARD

其表现形式是【key】:【value】,一行表示一个信息,信息过长会换行,并行首有空格。

方向:

无需知道主标签、副标签、自定义标签是什么,随便一份vcf文件,都可以解析。

1、逐行解析 

2、使用正则将主、副标签分离。先提取所有副标签(如TYPE)部分并处理,然后处理主标签(如TEL)部分。

3、拼接数据,最好是常用的jason字典格式。

部分代码,NSString的分类,主要针对上面思路,提供正则表达式。

@implementation NSString (vCard)

#pragma mark - ------------------ regexp

/**

regexp - 是否是一行有效的vcf文字

*/

+ (NSString *)regexpForCheckVcfLine

{

    return @"^[^ ][^:;]*\(;[^=;:]*=[^=;:]*\)*:.*";

}

/**

regexp - 某一行vcf文字中,获取主标签

*/

+ (NSString *)regexpForVcfLineMainTag

{

    return @"^[^:;=]*[;:]";

}

/**

regexp - 某一行vcf文字中,获取所有的副标签、副标签的值

*/

+ (NSString *)regexpForVcfLineOtherTagValues

{

    return @";[^=;:]\{1,\}=[^=;:]*";

}

/**

regexp - 某一行vcf文字中,获取每一个副标签

*/

+ (NSString *)regexpForVcfLinePerOtherTag

{

    return @"[^;:=]*=";

}

@end

有需要的可留言。

上一篇下一篇

猜你喜欢

热点阅读