OC:正则表达式找出所有符合要求的字符串

2020-06-11  本文已影响0人  春暖花已开

需求1:找出所有以#开头,以空格结尾的字符串

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *arr = [self getStringArrayWithRegularExpression:@"(#[a-z]+ )" checkString:@"Same place, same time, each photo in a different month. \n#fascinating #wonderfulearth "];
    NSLog(@"%@", arr);
}

- (NSArray<NSString *> *)getStringArrayWithRegularExpression:(NSString *)regex checkString:(NSString *)checkString {
    if (!checkString) {
        return nil;
    }
    NSError *error = NULL;
    NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:regex options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators error:&error];

    NSArray *resultArray = [regularExpression matchesInString:checkString options:NSMatchingReportProgress range:NSMakeRange(0, [checkString length])];
    NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:0];

    for (NSTextCheckingResult *result in resultArray) {
        for (NSInteger i = 1; i < [result numberOfRanges]; i++) {
            NSString *matchString;

            NSRange range = [result rangeAtIndex:i];

            if (range.location != NSNotFound) {
                matchString = [checkString substringWithRange:[result rangeAtIndex:i]];
            } else {
                matchString = @"";
            }
            [arr addObject:matchString];
        }
    }

    return [arr copy];
}

@end

输出:

(
    "#fascinating ",
    "#wonderfulearth "
)

需求2:找出所有符合规则的字符串并标红输入到label上

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSString *originStr = @"hello world, hello everybody~ OK, I konw";
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:originStr];
    NSArray *rangeArray = [self getRangesArrayWithRegularExpression:@"(hello|OK|konw)" checkString:originStr];
    
    for (NSValue *value in rangeArray) {
        NSRange range = value.rangeValue;
        [attrStr addAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]} range:range];
    }
    
    self.showLabel.attributedText = attrStr;
}

- (NSArray<NSValue *> *)getRangesArrayWithRegularExpression:(NSString *)regex checkString:(NSString *)checkString {
    if (!checkString) return nil;
    
    NSError *error = NULL;
    NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:regex options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators error:&error];

    NSArray *resultArray = [regularExpression matchesInString:checkString options:NSMatchingReportProgress range:NSMakeRange(0, [checkString length])];
    NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:0];

    for (NSTextCheckingResult *result in resultArray) {
        for (NSInteger i = 1; i < [result numberOfRanges]; i++) {
            NSRange range = [result rangeAtIndex:i];
            if (range.location != NSNotFound) {
                [arr addObject:[NSValue valueWithRange:range]];
            }
        }
    }
    return [arr copy];
}
效果图
上一篇 下一篇

猜你喜欢

热点阅读