iOS开发中,经常处理一些特殊字符串,比如新浪微博中,@他人的字符串会变成蓝色,微信中电话号码\网址\邮箱等可以变成蓝色等等,这里就可以用RegexKitLite这个类库快速的得到一个字符串中特殊字符串的相关信息,进而进行各种操作,同样可以用这个类库数实现图文混排等操作
-----这篇文章没有使用markdown的编辑模式,看着有点蛋疼,嘿嘿-----
1.前言
因为匹配规则是使用的正则表达式,所以这里对正则表达式不做过多了解,不会的找公司的后台哥哥,前端哥哥什么的写一个,或者百度下吧0.0 (大神无视)
2.导入类库
下载地址,首先我们下载下来就是一个.h和一个.m文件,废话不多说拖到自己的项目中,cmd+b编译一下,wtf !?这么多错误,原因就是这个类库采用的是mrc,解决如图
来吧baby,cmd+b编译起来,wtf !?又报了几十个错误?这是因为这个类库对系统的类库有依赖,加入如图的库依赖就ok了
3.基本使用
你会发现这个类库的实现文件2500+行代码,所以我这里只是讲解两个我用到的方法,而且日常开发应该这两个用的机会也比较大
- (BOOL)RKL_METHOD_PREPEND(enumerateStringsMatchedByRegex):(NSString *)regex usingBlock:(void (^)(NSInteger captureCount, NSString * const capturedStrings[captureCount], const NSRange capturedRanges[captureCount], volatile BOOL * const stop))block
- (BOOL)RKL_METHOD_PREPEND(enumerateStringsSeparatedByRegex):(NSString *)regex usingBlock:(void (^)(NSInteger captureCount, NSString * const capturedStrings[captureCount], const NSRange capturedRanges[captureCount], volatile BOOL * const stop))block
是不是这两个方法很相似,我们看看具体的实现,这是第一个,这里可以遍历出一个字符串中所有的根据指定正则表达式匹配出的特殊字符信息,包括个数,文本,range
/**
* 遍历所有的特殊字符串
* @param text 需要匹配字符串的文本
* @param pattern 正则表达式匹配规则(NSString类型)
* @param captureCount 特殊字符串的个数
* @param capturedStrings 特殊字符串
* @param capturedRanges 特殊字符串的range
* @param stop 没啥用
*
*/
[text enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
//这里需要注意,大家一起来数数这个block中星星的数量,没错,取值的时候如下面代码
NSString * capturedString = *capturedStrings;
NSRange range = *capturedRanges;
}];
再来看看下一个方法,其实就相当于这个方法的取反,遍历出一个字符串中所有的根据指定正则表达式匹配出的特殊字符信息以外的字符串信息,包括个数,文本,range (句子好长有点绕...)
/**
* 遍历所有的非特殊字符
* @param text 需要匹配字符串的文本
* @param pattern 正则表达式匹配规则(NSString类型)
* @param captureCount 非特殊字符串的个数
* @param capturedStrings 非特殊字符串
* @param capturedRanges 非特殊字符串的range
* @param stop 没啥用
*/
[text enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
//这里的参数使用和上面方法一样,需要加星号
}];
4.结束语
到这里这两个方法的介绍基本就介绍完了,在这个block中,拿到这些特殊字符或者非特殊字符信息根据你们的需求尽情的玩耍吧
我是一个iOS小菜鸡,总有一天我会成为一只雄鹰
旅途很长,还需修行