NSRegularExpression 使用小记

本文详细记录了NSRegularExpression的使用经验,包括各种方法的应用,通过实例解析其在文本匹配和处理中的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一些NSRegularExpression方法的使用

 //block方式遍历出合适的结果
 - (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void (NS_NOESCAPE ^)(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL *stop))block;
 
 //返回所有匹配的结果
 - (NSArray<NSTextCheckingResult *> *)matchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;
 
 //返回匹配个数
 - (NSUInteger)numberOfMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;
 
  返回第一个匹配的结果,结果保存在 NSTextCheckingResult
 - (nullable NSTextCheckingResult *)firstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;
 
   返回第一个正确匹配结果字符串的NSRange
 - (NSRange)rangeOfFirstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;



测试例子:

    NSString *p1 = @"L[A-C]";//匹配LA LB LC
    NSString *s1 = @"w29LBjswLCnkow";

    [self validateString:s1 withPattern:p1];

- (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;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值