全世界都知道正则的 (XXX) 是捕获, (?:XXX) 是匹配但不捕获,但OC中是几个意思? 真是不吐不爽!
int main(int argc, const char * argv[]) {
const char *text =
"abcdefg12345\n"
"abcdefg12345\n"
"ABCDEFG12345\n"
"abcdefg12345\n"
"abcdefg12345\n";
NSString *string = @(text);
NSError* error = nil;
NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:@"(?:\\D+)(\\d+)(?:\\D)" options:0 error:&error];
NSArray* match = [reg matchesInString:string options:0 range:NSMakeRange(0, string.length)];
for (NSTextCheckingResult *result in match)
{
NSString *str = [string substringWithRange:result.range];
NSLog(@"result: %@", str);
}
return 0;
}
输出结果:
result: abcdefg12345
result: abcdefg12345
result: abcdefg12345
result: abcdefg12345
result: abcdefg12345
PS:
//问题延伸
NSString *path = @"/Users/sma11case/aaaa/cccc";
NSString *exp = @"(?:/)([^/]+)(?:/[^/]+)$"; // 本来不管是否贪婪都可以安全匹配到aaaa,现在变成要看脸色了