NSRegularExpression使用

使用正則式匹配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.返回第一個(gè)正確匹配結(jié)果字符串的NSRange
    NSRange matchRange = [regex rangeOfFirstMatchInString:string options:NSMatchingReportProgress range:textRange];
    NSLog(@"%@",NSStringFromRange(matchRange));//{3, 2}
    
    //2.返回第一個(gè)匹配的結(jié)果,結(jié)果保存在 NSTextCheckingResult
    NSTextCheckingResult *textCheck = [regex firstMatchInString:string options:NSMatchingReportProgress range:textRange];
    NSLog(@"%@",NSStringFromRange(textCheck.range));//{3, 2}
    
    //3.返回匹配個(gè)數(shù)
    NSUInteger number = [regex numberOfMatchesInString:string options:NSMatchingReportProgress range:textRange];
    NSLog(@"%lu",(unsigned long)number);//2
    
    //4.返回所有匹配的結(jié)果
    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;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容