美文网首页
NSRegularExpression使用

NSRegularExpression使用

作者: 一达 | 来源:发表于2019-09-16 10:15 被阅读0次

    使用正则式匹配NSRegularExpression

    - (void)regularMethod{
        
        NSString *string = @"hsrjtosmtdetail:id=112110&goodsid=123456789&sourcetype=1";  //格式
        NSString *regxStr = @":id=(\\d)+|type=(\\d)|goodsid=(\\d)+";  //正则式
        NSError *error;
        NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:regxStr options:NSRegularExpressionCaseInsensitive error:&error];
        if (error) {
            NSLog(@"error=%@",error);
            return;
        }
        __block NSString *ID;
        __block NSString *goodsID;
        [regular enumerateMatchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0, string.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
            NSRange matchRange = result.range;
            if (matchRange.length && matchRange.location) {
                NSString *str = [string substringWithRange:matchRange];
                if ([str containsString:@":id"]) {
                    ID = [str substringFromIndex:4];
                }else if ([str containsString:@"goodsid="]){
                    goodsID = [str substringFromIndex:8];
                }
            }
        }];
        NSLog(@"id=%@  %@",ID,goodsID);  //输出id=112110  123456789
    }
    

    其他

    - (BOOL)validateString:(NSString *)string withPattern:(NSString *)pattern{
        
        NSError *error = NULL;
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
        
        NSRange textRange = NSMakeRange(0, string.length);
        
        //1.返回第一个正确匹配结果字符串的NSRange
        NSRange matchRange = [regex rangeOfFirstMatchInString:string options:NSMatchingReportProgress range:textRange];
        NSLog(@"%@",NSStringFromRange(matchRange));//{3, 2}
        
        //2.返回第一个匹配的结果,结果保存在 NSTextCheckingResult
        NSTextCheckingResult *textCheck = [regex firstMatchInString:string options:NSMatchingReportProgress range:textRange];
        NSLog(@"%@",NSStringFromRange(textCheck.range));//{3, 2}
        
        //3.返回匹配个数
        NSUInteger number = [regex numberOfMatchesInString:string options:NSMatchingReportProgress range:textRange];
        NSLog(@"%lu",(unsigned long)number);//2
        
        //4.返回所有匹配的结果
        NSArray<NSTextCheckingResult *> *results = [regex matchesInString:string options:NSMatchingReportProgress range:textRange];
        NSLog(@"%@",results);
        //"<NSSimpleRegularExpressionCheckingResult: 0x60800007c580>{3, 2}{<NSRegularExpression: 0x60000004e6a0> L[A-C] 0x1}",
        //"<NSSimpleRegularExpressionCheckingResult: 0x60800007c040>{8, 2}{<NSRegularExpression: 0x60000004e6a0> L[A-C] 0x1}"
        
        //5.
        [regex enumerateMatchesInString:string options:0 range:textRange usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
            NSLog(@"%@",result);
        }];
        //"<NSSimpleRegularExpressionCheckingResult: 0x60800007c580>{3, 2}{<NSRegularExpression: 0x60000004e6a0> L[A-C] 0x1}",
        //"<NSSimpleRegularExpressionCheckingResult: 0x60800007c040>{8, 2}{<NSRegularExpression: 0x60000004e6a0> L[A-C] 0x1}"
        
        //6.替换匹配的值
        NSString *newString = [regex stringByReplacingMatchesInString:string options:0 range:textRange withTemplate:@"Replace-100"];
        NSLog(@"new str:%@",newString);//new str:w29Replace-100jswReplace-100nkow
        
        BOOL didValidate = NO;
        if (matchRange.location != NSNotFound)
            didValidate = YES;
        
        return didValidate;
    }
    

    相关文章

      网友评论

          本文标题:NSRegularExpression使用

          本文链接:https://www.haomeiwen.com/subject/tvyqyctx.html