正则表达式在IOS开发中的应用
正则表达式在字符串查找,替换,检测中的应用非常广泛,正则表达式是什么,有怎样的语法,我的另一篇博客中有详细的介绍: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参数,它是一个枚举,表示正则模式的设置,如下:
typedefNS_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//使用UnicodeTR#29标准作为词的边界,否则所有传统正则表达式的词边界都有效 };
注意:1、NSRegularExpressionCaseInsensitive模式下正则表达式 aBc 会匹配到abc.
2、NSRegularExpressionIgnoreMetacharacters模式下正则表达式a b c 会匹配到abc,正则表达式ab#c会匹配到ab。
3、NSRegularExpressionAllowCommentsAndWhitespace模式下正则表达式[a-z],会匹配到[a-z]。
二、获取查询结果
初始化完毕正则表达式的处理类后,我们需要进行正则表达式的查询,IOS官方提供了两种模式:
1、带block模式的方法:
- (void)enumerateMatchesInString:(Nsstring *)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void (^)(NSTextCheckingResult *result,NSMatchingFlags flags,BOOL *stop))block;
使用举例:
NSRegularExpression*regex=[[NSRegularExpressionalloc]initWithPattern:@"[a-z]"options:NSRegularExpressionCaseInsensitiveerror:nil]; [regexenumerateMatchesInString:@"124a"options:NSMatchingReportProgressrange:NSMakeRange(0,4)usingBlock:^(NSTextCheckingResult*result,NSMatchingFlagsflags,BOOL*stop){ NSLog(@"%@",result); }];
注意:1、这个函数的一个参数options是一个枚举,设置回调的方式,如下:
rush:cpp;toolbar: true; auto-links: false;" style="color:rgb(51,NSMatchingOptions){ NSMatchingReportProgress=1<<0,//找到最长的匹配字符串后调用block回调 NSMatchingReportCompletion=1<<1,//找到任何一个匹配串后都回调一次block NSMatchingAnchored=1<<2,//从匹配范围的开始出进行极限匹配 NSMatchingWithTransparentBounds=1<<3,//允许匹配的范围超出设置的范围 NSMatchingWithoutAnchoringBounds=1<<4//禁止^和$自动匹配行还是和结束 };
2、block回调中的flags枚举对应如下:
rush:cpp;toolbar: true; auto-links: false;" style="color:rgb(51,NSMatchingFlags){ NSMatchingProgress=1<<0,//匹配到最长串是被设置 NSMatchingCompleted=1<<1,//全部分配完成后被设置 NSMatchingHitEnd=1<<2,//匹配到设置范围的末尾时被设置 NSMatchingrequiredEnd=1<<3,//当前匹配到的字符串在匹配范围的末尾时被设置 NSMatchingInternalError=1<<4//由于错误导致的匹配失败时被设置 };
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;
它可以帮助我们将正则表达式加上"\"进行保护,将元字符转化成字面值。
到此,在IOS中正则表达式的基本用法就介绍完了,希望正则表达式的应用,能为你的项目节省更多时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。