IOS NSPredicate 及正则表达式

来源:互联网 发布:工商信息查询网大数据 编辑:程序博客网 时间:2024/04/30 19:20

一、Predicate

Predicate译为断言。

官网:Predicates wrap some combination of expressions and operators and when evaluated return a BOOL.

常用方法:

+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat, ...;

常用Format:

(1)比较运算符>,<,==,>=,<=,!=
可用于数值及字符串
例:@"num > 100"
(2)范围运算符:IN、BETWEEN
例:@"num BETWEEN {1,5}"
      @"addr IN {'shanghai','beijing'}"

(3)字符串本身:SELF 
例:@“SELF == ‘APPLE’"


(4)字符串相关:BEGINSWITH、ENDSWITH、CONTAINS
例:@"name CONTAIN[cd] 'ang'"   //包含某个字符串    
       @"name BEGINSWITH[c] 'sh'"     //以某个字符串开头
       @"name ENDSWITH[d] 'ang'"      //以某个字符串结束
        注:[c]不区分大小写[d]不区分发音符号即没有重音符号[cd]既不区分大小写,也不区分发音符号。
 注:CONTAIN 只能判断是否包含特定字符,而非正则表达式

(5)通配符:LIKE
例:@"name LIKE[cd] '*er*'"    //*代表通配符,Like也接受[cd].
       @"name LIKE[cd] '???er*'"


(6)正则表达式:MATCHES
例:NSString *regex = @"^A.+e$";   //以A开头,e结尾
      @"name MATCHES %@",regex


示例:

    NSString *wordReg = @"^[a-zA-Z0-9]\\w{5,15}$";        NSString *digitalReg = @"1";    NSString *lettersReg = @"a";        NSPredicate *wordPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",wordReg];    NSPredicate *digitalPre = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@", digitalReg];    NSPredicate *lettersPre = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",lettersReg];        MPLog(@"word:%d     digital:%d       letters:%d",[wordPre evaluateWithObject:text],[digitalPre evaluateWithObject:text],[lettersPre evaluateWithObject:text]);    if ([digitalPre evaluateWithObject:text] == YES&&[lettersPre evaluateWithObject:text]==YES&&[wordPre evaluateWithObject:text]==YES)        return YES;    else        return NO;



二、正则 NSRegularExpression

- (NSTextCheckingResult *)firstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

示例:

    NSString *urlString = @"sfdshttp://www.baidu.com";    NSError *error;    //http+:[^\\s]* 这是检测网址的正则表达式    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"http+:[^\\s]*" options:0 error:&error];        if (regex != nil) {        NSTextCheckingResult *firstMatch = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, [urlString length])];                if (firstMatch) {            NSRange resultRange = [firstMatch rangeAtIndex:0];            //从urlString中截取数据                        NSString *result = [urlString substringWithRange:resultRange];            MPLog(@"%@",result);        }    }            NSRegularExpression *wordReg = [NSRegularExpression regularExpressionWithPattern:@"^[a-zA-Z0-9]\\w{5,15}$" options:0 error:&error];        NSRegularExpression *digitalReg = [NSRegularExpression regularExpressionWithPattern:@"[a-zA-Z]" options:0 error:&error];    NSRegularExpression *lettersReg = [NSRegularExpression regularExpressionWithPattern:@"[0-9]" options:0 error:&error];            NSTextCheckingResult *result1 = [wordReg firstMatchInString:text options:0 range:NSMakeRange(0, text.length)];    NSTextCheckingResult *result2 = [digitalReg firstMatchInString:text options:0 range:NSMakeRange(0, text.length)];    NSTextCheckingResult *result3 = [lettersReg firstMatchInString:text options:0 range:NSMakeRange(0, text.length)];        MPLog(@"wordReg:%d  digitalReg:%d    lettersReg:%d",[result1 rangeAtIndex:0].length,[result2 rangeAtIndex:0].length,[result3 rangeAtIndex:0].length);        if ([result1 rangeAtIndex:0].length>0&&[result2 rangeAtIndex:0].length>0&&[result3 rangeAtIndex:0].length) {        return YES;    }else {        return NO;    }




0 0
原创粉丝点击