2012-02-09 10 views
6

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ę.

+0

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

+0

@hoha jeśli przeniesiesz swój komentarz do odpowiedzi, wtedy fuzzygoat może go zaakceptować i przenieść to pytanie z kolejki Nieodebranych. –

Odpowiedz

2

Tak, to z powodu zerowego dopasowania. {NSNotFound, 0} może zostać zwrócony przez rangeAtIndex: dla grupy, która nie uczestniczyła w meczu.

Powiązane problemy