美文网首页
vCard文件解析 - 正则

vCard文件解析 - 正则

作者: 素还真人 | 来源:发表于2018-06-15 20:06 被阅读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

    有需要的可留言。

    相关文章

      网友评论

          本文标题:vCard文件解析 - 正则

          本文链接:https://www.haomeiwen.com/subject/kgomeftx.html