正则表达式
iOS中,通过传入正则表达式字符串,获取到NSRegularExpression对象,使用matchesInString等相关方法,传入字符串进行匹配,还可使用NSReplacement扩展方法进行正则替换等。如:
//block枚举匹配结果
- (void)enumerateMatchesInString:(NSString*)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void(NS_NOESCAPE^)(NSTextCheckingResult*_Nullableresult,NSMatchingFlagsflags,BOOL*stop))block;
//返回匹配数组
- (NSArray <NSTextCheckingResult *> *)matchesInString:(NSString*)string options:(NSMatchingOptions)options range:(NSRange)range;
//使用templ根据正则表达式对string进行正则替换
- (NSString*)stringByReplacingMatchesInString:(NSString*)string options:(NSMatchingOptions)options range:(NSRange)range withTemplate:(NSString*)templ;
常用正则列举
电话号码:^1[34578]\\d{9}$(^匹配字符串开始位置;[]字符集合或范围;\转义字符向后引用用于转义;\d匹配一个数字;{n}匹配n次;{n,m}匹配n-m次;$匹配字符串结束位置)
中文字符:[\u4e00-\u9fa5]
纯数字:^[0-9]*$
URL(含协议或直接www.开头):\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))
谓词(NSPredicate)
组成:表达式+运算符+值。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF = 123"];
NSPredicate对象可通过evaluateWithObject方法判断对象是否满足谓词表达式。
NSPredicate对象可作为NSArray、NSMutableArray的方法(如filteredArrayUsingPredicate)的传入参数进行数组筛选。
运算符
比较运算符(=/==,<=,!=,BETWEEN):@"SELF BETWEEN {100, 200}"
逻辑运算符(&& / AND,|| / OR,! / NOT):@"SELF > 2 && SELF < 5"
字符串匹配运算符(BEGINSWITH、ENDSWITH、CONTAINS、LIKE、MATCHES):@"%@ LIKE '*test?'", abctestz
注:?代表单个通配符,*代表任意多个字符,运算符后使用[c]不区分大小写。
注:MATCHES用于匹配正则表达式@"SELF MATCHES %@", ^[1][3-8]\\d{9}$。
集合运算符(ALL,ANY,SOME,NONE,IN)
简单使用
1、判断模型中的属性是否满足谓词表达式
NSPredicate *testPred = [NSPredicate predicateWithFormat:@"age > 18"];
[testPred evaluateWithObject:personModel];
2、filteredArrayUsingPredicate过滤数组集合
3、使用占位符参数(%K,%@,SELF等)