您的位置:首页 > 移动开发 > IOS开发

iOS中3种正则表达式的使用与比较

2016-02-23 14:49 239 查看
之前我在博文中介绍过iOS中自带正则表达式的使用( 传送门),后来我发现其实iOS中有三种方式来实现正则表达式的匹配。现在将他们都记录在这里: 

1.利用NSPredicate(谓词)匹配 

例如匹配有效邮箱: 

?
谓词匹配比较灵活,但是需要有谓词的相关知识。 

2.利用rangeOfString:option:直接查找 

?
options中设定NSRegularExpressionSearch就是表示利用正则表达式匹配,会返回第一个匹配结果的位置。 

3.使用正则表达式类 

?
使用系统的正则表达式类(NSRegularExpression)会返回匹配的多个结果。 

小结: 

第一种匹配需要学习NSPredicate的写法,需要查阅苹果相关技术文档;如果只关心第一个匹配的结果,第二种匹配较为简洁;如果需要匹配多个结果,同时匹配多次,第三种方式效率会更高

转载自:http://my.oschina.net/pljhonglu/blog/199197

初始化完毕正则表达式的处理类后,我们需要进行正则表达式的查询,IOS官方提供了两种模式:


1、带block模式的方法:

- (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void (^)(NSTextCheckingResult *result, NSMatchingFlags
flags, BOOL *stop))block;

使用举例:

?
注意:1、这个函数的一个参数options是一个枚举,设置回调的方式,如下:

?
            2、block回调中的flags枚举对应如下:

?
            3、还有一点需要注意,就是那个bool值stop,我们可以在block块中设置它为YES,之后便会停止查找。


2、非block的方法

这个方法会返回一个结果数组,将所有匹配的结果返回

- (NSArray *)matchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

这个方法会返回匹配到得字符串的个数
- (NSUInteger)numberOfMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

这个方法会返回第一个查询到得结果,这个NSTextCheckingResult对象中有一个range属性,可以得到匹配到的字符串的范围。
- (NSTextCheckingResult *)firstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

这个方法直接返回匹配到得范围,NSRange。
- (NSRange)rangeOfFirstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;



三、一个辅助方法

在NSRegularExpression类中还提供了一个辅助方法:

+ (NSString *)escapedPatternForString:(NSString *)string;

它可以帮助我们将正则表达式加上"\"进行保护,将元字符转化成字面值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: