Od patrząc na docs dla NSTextCheckingResult
Byłem pod wrażeniem, że jeśli nie pasuje w NSRegularExpression
poszukiwaniu stwierdzono własność zakres NSCheckingResult
będzie ustawiony na {NSNotFound,0}
NSCheckingResult Range Właściwość nie ustawiona na {NSNotfound, 0}?
Z mojego testu poniżej jestem stwierdzenia, że jeśli nie pasuje zakres NSCheckingResult
jest ustawiony na {0,0}
. Jest to mały punkt, ale chciałem tylko wyjaśnić, w jaki sposób to działa.
// REGEXPRESSION
NSString *textBuffer = @"1234567890";
NSString *pattern = @"(([A-Z]+))";
NSRegularExpression *regExp = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSTextCheckingResult *match = [regExp firstMatchInString:textBuffer options:0 range:NSMakeRange(0, [textBuffer length])];
// ERROR CHECK
if([match range].location == NSNotFound) NSLog(@"Match Not found");
NSLog(@"location: %d", [match range].location);
NSLog(@"length : %d", [match range].length);
// OUTPUT
location: 0
length : 0
EDIT: W tym przykładzie NSTextCheckingResult *match
jest ustawiony na nil
, co jest prawdopodobnie dlaczego lokalizacja i długość wracają zero (wiadomość do zera obiektu).
if(!match) NSLog(@"Match Not Found");
Mam więc domyślam się, że NSNotFound
zwracany jest tylko wtedy, gdy istnieje wiele grup przechwytywania gdzie reprezentować pustą grupę.
Tak, to z powodu zerowego dopasowania. '{NSNotFound, 0}' może zostać zwrócone przez 'rangeAtIndex:' dla grupy, która nie uczestniczyła w dopasowaniu. – hoha
@hoha jeśli przeniesiesz swój komentarz do odpowiedzi, wtedy fuzzygoat może go zaakceptować i przenieść to pytanie z kolejki Nieodebranych. –