谓词和正则表达式

正则表达式

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 *)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等)

你可能感兴趣的:(谓词和正则表达式)