合并两个NSRegularExpression

时间:2014-12-14 20:00:22

标签: ios objective-c

我想将stringWithHashtags中的每个字添加到以attString@开头的#中。我认为最简单的方法是将两个NSRegularExpression合并,然后将其分配给数组。实际上我会像这样一个接一个地分配它们:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\\w+)" options:0 error:&error];

NSRegularExpression *regexM = [NSRegularExpression regularExpressionWithPattern:@"@(\\w+)" options:0 error:&error];

NSArray *matches = [regex matchesInString:stringWithHashtags options:0 range:NSMakeRange(0, stringWithHashtags.length)];
matches = [regexM matchesInString:stringWithHashtags options:0 range:NSMakeRange(0, stringWithHashtags.length)];

在结果中只提到蓝色。(它只能与标签一起使用)

这是我的完整方法:

-(NSMutableAttributedString*)detectHashtags:(NSString *)stringWithHashtags{

    NSError *error = nil;

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\\w+)" options:0 error:&error];

    NSRegularExpression *regexTag = [NSRegularExpression regularExpressionWithPattern:@"@(\\w+)" options:0 error:&error];

    NSArray *matches = [regex matchesInString:stringWithHashtags options:0 range:NSMakeRange(0, stringWithHashtags.length)];
    matches = [regexTag matchesInString:stringWithHashtags options:0 range:NSMakeRange(0, stringWithHashtags.length)];

    NSMutableAttributedString *attString= [[NSMutableAttributedString alloc] initWithString:stringWithHashtags];

    NSInteger stringLength= [stringWithHashtags length];

    for (NSTextCheckingResult *match in matches) {

        NSRange wordRange = [match rangeAtIndex:0];
        NSString* word = [stringWithHashtags substringWithRange:wordRange];

        UIColor *foregroundColor=[UIColor blueColor];
        [attString addAttribute:NSForegroundColorAttributeName value:foregroundColor range:wordRange];

    }
    UIFont *font=[UIFont fontWithName:@"Helvetica" size:13.0f];
    [attString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, stringLength)];

    return attString;
}

是否有可能合并regexregexTag

1 个答案:

答案 0 :(得分:2)

您是否考虑过合并正则表达式模式而不是NSRegularExpression实例?

鉴于 re1 re2 ,模式(re1)|(re2)匹配其中任何一个。例如,#| @ 匹配#或@。您还可以使用 [集合中的字符] 匹配一组字符中的一个。

HTH