美文网首页
OC:正则表达式找出所有符合要求的字符串

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

作者: 春暖花已开 | 来源:发表于2020-06-11 20:34 被阅读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];
}
效果图

相关文章

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

    需求1:找出所有以#开头,以空格结尾的字符串 输出: 需求2:找出所有符合规则的字符串并标红输入到label上

  • 正则表达式相关笔记

    通过正则表达式查找出所有匹配字符串

  • day_18正则表达式

    1.正则表达式 1.1作用 正则表达式是用来匹配或描述字符串的工具1.判断输入的字符串是否符合要求,如是否是邮箱/...

  • OC中的正则表达

    OC正则表达式 NSString 简单的字符串查找、替换; NSRegularExpression 复杂的文本匹配...

  • 正则的用法

    正则表达式是用来做什么的?答:用来处理字符串的,相当于过滤的性质,找到符合要求的字符集。 怎样创建一个正则表达式?...

  • [译]Scala正则表达式模式

    正则表达式是用于找出数据中模式的字符串。任何字符串都可以使用.r方法转换为正则表达式。 在上面例子中,number...

  • iOS正则表达式

    正则表达式写法:OC的正则表达式(RegularExpression)OC的正则表达式本文主要绍介在OC的以下3个...

  • 关于正则表达式的总结

    正则表达式 :最大的用途就是用来匹配字符串,进行模糊查询。正则表达式不是OC特有的,也不是Swift特有的,几乎所...

  • 113.xpath的使用

    一.解析页面模块比较: 1.正则表达式是进行内容匹配,将符合要求的内容全部获取; 2.xpath()能将字符串转化...

  • Java正则表达式

    正则表达式一般用于字符串匹配、查找、替换、分割。例如: 从网页中找出email地址,IP地址是否正确,从网页中找出...

网友评论

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

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