iOS 正则表达式详解
一、系统自带正则表达式用法
除了正则可以用,还有NSScanner这个类可以达到某些相同的效果
1、创建正则表达式对象
NSString*reg=@"[0-9]+";//字符串正则表达式NSError*error=NULL;//错误对象NSRegularExpression*regex=[NSRegularExpressionregularExpressionWithPattern:regoptions:NSRegularExpressionCaseInsensitiveerror:&error];//匹配reg的正则表达式对象
2、正则表达式对象可调用的方法
/**1*正则表达式匹配**@paramstring在此字符串中匹配*@paramoptions一般填0*@paramrange在此范围内匹配*@paramblock在block内会把匹配到的结果逐个返回NSTextCheckingResult,通过此对象的range属性可以查看匹配到的字符串的location和length,同过subString方法可以得到被匹配字符串*/-(void)enumerateMatchesInString:(NSString*)stringoptions:(NSMatchingOptions)optionsrange:(NSRange)rangeusingBlock:(void(^)(NSTextCheckingResult*__nullableresult,NSMatchingFlagsflags,BOOL*stop))block;/**2*正则表达式匹配**@paramstring在此字符串中匹配*@paramoptions一般填0*@paramrange在此范围内匹配*@paramblock返回数组,数组内是每个匹配到的NSTextCheckingResult*/-(NSArray<NSTextCheckingResult*>*)matchesInString:(NSString*)stringoptions:(NSMatchingOptions)optionsrange:(NSRange)range;/**3*正则表达式匹配**@paramstring在此字符串中匹配*@paramoptions一般填0*@paramrange在此范围内匹配*@paramblock返回匹配到的个数*/-(NSUInteger)numberOfMatchesInString:(NSString*)stringoptions:(NSMatchingOptions)optionsrange:(NSRange)range;/**4*正则表达式匹配**@paramstring在此字符串中匹配*@paramoptions一般填0*@paramrange在此范围内匹配*@paramblock返回第一次匹配到的NSTextCheckingResult对象*/-(nullableNSTextCheckingResult*)firstMatchInString:(NSString*)stringoptions:(NSMatchingOptions)optionsrange:(NSRange)range;/**5*正则表达式匹配**@paramstring在此字符串中匹配*@paramoptions一般填0*@paramrange在此范围内匹配*@paramblock返回第一次匹配到的NSTextCheckingResult对象的range*/-(NSRange)rangeOfFirstMatchInString:(NSString*)stringoptions:(NSMatchingOptions)optionsrange:(NSRange)range;3.NSString//-(NSRange)rangeOfString:(NSString*)searchStringoptions:(NSStringCompareOptions)mask;//-(NSRange)rangeOfString:(NSString*)searchStringoptions:(NSStringCompareOptions)maskrange:(NSRange)searchRange;//匹配文本-(void)matchIn{NSString*searchText=@"rangeOf77Str88ing";//只能匹配一次NSRangerange=[searchTextrangeOfString:@"[0-9]+"options:NSRegularExpressionSearch];//拿到匹配结果if(range.location!=NSNotFound){NSString*searchString=[searchTextsubstringWithRange:range];NSLog(@"range.location=%lurange.length=%lu",(unsignedlong)range.location,(unsignedlong)range.length);NSLog(@"String=%@",searchString);}else{NSLog(@"没有匹配");}}4、正则表达式示例代码 NSString*summaryString=[NSStringstringWithFormat:@"对%@题错%@题|任务正确率%@|作业平均正确率%@",questionRight,questionWrong,questionRate,taskRate]; NSMutableAttributedString*summaryAttributString=[[NSMutableAttributedStringalloc]initWithString:summaryString]; //正则匹配,匹配数字和百分号 NSString*reg=@"[0-9]+|%"; NSError*error=nil; NSRegularExpression*regex=[[NSRegularExpressionalloc]initWithPattern:regoptions:NSRegularExpressionCaseInsensitiveerror:&error]; NSArray*array=[regexmatchesInString:summaryStringoptions:0range:NSMakeRange(0,summaryString.length)]; if(array.count){ for(inti=0;i<array.count;i++){ NSTextCheckingResult*result=array[i]; NSRangerange=result.range; [summaryAttributStringaddAttribute:NSForegroundColorAttributeNamevalue:[UIColorcolorWithHexString:@"#e71419"]range:range]; } } self.summaryLabel.attributedText=summaryAttributString;
5.谓词
//验证是否存在-(BOOL)validateRegular:(NSString*)regularmatchText:(NSString*)text;{ //正则表达式格式 //NSString*regular=@"^1[0-9]{6}$"; //创建谓词 NSPredicate*numberPre=[NSPredicatepredicateWithFormat:@"SELFMATCHES%@",regular]; //匹配字符串,若能匹配返回YES,否则返回NO; BOOLisMatch=[numberPreevaluateWithObject:text]; returnisMatch;}
以上所述是小编给大家介绍的iOS正则表达式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!