您好我正在使用正则表达式来匹配括号内的字符串,并使用该范围在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;
答案 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];
}