多个匹配REGEX

时间:2013-12-29 10:27:09

标签: ios regex nsattributedstring

您好我正在使用正则表达式来匹配括号内的字符串,并使用该范围在referencedString中设置属性。

这里的代码只提取一个范围,正则表达式正在工作,但我需要设置第二个范围分配。

 NSString *mainString = @"Main Term  (Rounded) [Square] ~Italic~ (Rounded) [Square] ~Italic~";
    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:mainString];
NSError *error = nil;
    NSRegularExpression *squareBracketsRegex = [NSRegularExpression regularExpressionWithPattern:@"\\[(.*?)\\]" options:0 error:&error];
    NSRange squareBracketsRange = [squareBracketsRegex rangeOfFirstMatchInString:mainString options:0 range:NSMakeRange(0, mainString.length)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:squareBracketsRange];
cell.textLabel.attributedText = string;

1 个答案:

答案 0 :(得分:1)

你得到的是rangeOfFirstMatchInString,所以显然你只是得到你的正则表达式的第一场比赛。

您可以使用类似于Apple NSRegularExpression文档中的代码来遍历正则表达式中找到的所有匹配项。

NSArray *matches = [regex matchesInString:string
                                  options:0
                                    range:NSMakeRange(0, [string length])];
for (NSTextCheckingResult *match in matches) {
     NSRange matchRange = [match range];
     NSRange firstHalfRange = [match rangeAtIndex:1];
     NSRange secondHalfRange = [match rangeAtIndex:2];
}