正则表达式在字符串查找,替换,检测中的应用很是普遍,正则表达式是什么,有怎样的语法,个人另外一篇博客中有详细的介绍:http://my.oschina.net/u/2340880/blog/403508。这里只简单说一下其概念 ,正则表达式是一种语法小巧简单的语言,用来约束一些过滤字符串条的条件。不少开发工具都有支持正则表达式的内容,IOS也不例外,在IOS中NSRegularExpression类就是一个专门来处理正则表达式的类。正则表达式
初始化NSRegularExpression的方法有两种,一个init方法和一个类方法。其做用基本是同样的数组
+ (NSRegularExpression *)regularExpressionWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error;函数
- (instancetype)initWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error 工具
其中,pattern是正则表达式,options是参数。对于option参数,它是一个枚举,表示正则模式的设置,以下:学习
typedef NS_OPTIONS(NSUInteger, NSRegularExpressionOptions) { NSRegularExpressionCaseInsensitive = 1 << 0, //不区分字母大小写的模式 NSRegularExpressionAllowCommentsAndWhitespace = 1 << 1, //忽略掉正则表达式中的空格和#号以后的字符 NSRegularExpressionIgnoreMetacharacters = 1 << 2, //将正则表达式总体做为字符串处理 NSRegularExpressionDotMatchesLineSeparators = 1 << 3, //容许.匹配任何字符,包括换行符 NSRegularExpressionAnchorsMatchLines = 1 << 4, //容许^和$符号匹配行的开头和结尾 NSRegularExpressionUseUnixLineSeparators = 1 << 5, //设置\n为惟一的行分隔符,不然全部的都有效。 NSRegularExpressionUseUnicodeWordBoundaries = 1 << 6 //使用Unicode TR#29标准做为词的边界,不然全部传统正则表达式的词边界都有效 };
注意:一、NSRegularExpressionCaseInsensitive模式下正则表达式 aBc 会匹配到abc.开发工具
二、NSRegularExpressionIgnoreMetacharacters模式下正则表达式a b c 会匹配到abc,正则表达式ab#c会匹配到ab。ui
三、NSRegularExpressionAllowCommentsAndWhitespace模式下正则表达式[a-z],会匹配到[a-z]。spa
初始化完毕正则表达式的处理类后,咱们须要进行正则表达式的查询,IOS官方提供了两种模式:.net
- (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void (^)(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop))block;code
使用举例:
NSRegularExpression * regex = [[NSRegularExpression alloc]initWithPattern:@"[a-z]" options:NSRegularExpressionCaseInsensitive error:nil]; [regex enumerateMatchesInString:@"124a" options:NSMatchingReportProgress range:NSMakeRange(0, 4) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { NSLog(@"%@",result); } ];
注意:一、这个函数的一个参数options是一个枚举,设置回调的方式,以下:
typedef NS_OPTIONS(NSUInteger, NSMatchingOptions) { NSMatchingReportProgress = 1 << 0, //找到最长的匹配字符串后调用block回调 NSMatchingReportCompletion = 1 << 1, //找到任何一个匹配串后都回调一次block NSMatchingAnchored = 1 << 2, //从匹配范围的开始出进行极限匹配 NSMatchingWithTransparentBounds = 1 << 3, //容许匹配的范围超出设置的范围 NSMatchingWithoutAnchoringBounds = 1 << 4 //禁止^和$自动匹配行仍是和结束 };
二、block回调中的flags枚举对应以下:
typedef NS_OPTIONS(NSUInteger, NSMatchingFlags) { NSMatchingProgress = 1 << 0, //匹配到最长串是被设置 NSMatchingCompleted = 1 << 1, //所有分配完成后被设置 NSMatchingHitEnd = 1 << 2, //匹配到设置范围的末尾时被设置 NSMatchingRequiredEnd = 1 << 3, //当前匹配到的字符串在匹配范围的末尾时被设置 NSMatchingInternalError = 1 << 4 //因为错误致使的匹配失败时被设置 };
三、还有一点须要注意,就是那个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;
它能够帮助咱们将正则表达式加上"\"进行保护,将元字符转化成字面值。
到此,在IOS中正则表达式的基本用法就介绍完了,但愿正则表达式的应用,能为你的项目节省更多时间。
疏漏之处 欢迎指正
学习使用 欢迎转载
专一技术,热爱生活,交流技术,也作朋友。
——珲少 QQ群:203317592