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官方提供了两种模式:
- (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,之后便会停止查找。
这个方法会返回一个结果数组,将所有匹配的结果返回
- (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;
它可以帮助我们将正则表达式加上"\"进行保护,将元字符转化成字面值。
1.利用NSPredicate(谓词)匹配
例如匹配有效邮箱:
?
2.利用rangeOfString:option:直接查找
?
3.使用正则表达式类
?
小结:
第一种匹配需要学习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, NSMatchingFlagsflags, BOOL *stop))block;
使用举例:
?
?
?
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;
它可以帮助我们将正则表达式加上"\"进行保护,将元字符转化成字面值。
相关文章推荐
- IOS BLE4.0 数据重发的问题
- iOS App集成Apple Pay教程(附示例代码)
- 深入浅出iOS事件机制
- 使用AFNetworking请求数据成功后走了两遍success的原因
- iOS runloop
- iOS 7的手势滑动返回功能
- iOS textview滚动到底部
- iOS 下APNS推送处理函数详解
- iOS9 TableView和ScrollView滚动不响应问题
- IOS 初次接触
- iOS9适配
- iOS自定义navigationBar 的rightBarButtonItems
- iOS系统异步请求封装
- iOS小明开发笔记(十五) (Quartz2D矩阵操作)
- iOS小明开发笔记(十三) (Quartz2D简单使用二)
- iOS小明开发笔记(十二) (Quartz2D简单使用一)
- 关于xcode7 ios9的一些变化
- iOS创建系统TabBar
- iOS小明开发笔记(十一) (Quartz2D简单介绍)
- iOS去掉按钮的点击效果