Guardando la documentazione per NSTextCheckingResult
ho avuto l'impressione che, se è stata trovata alcuna corrispondenza in una ricerca NSRegularExpression
la proprietà intervallo per NSCheckingResult
verrebbe impostato su {NSNotFound,0}
Proprietà NSCheckingResult Range non impostata su {NSNotfound, 0}?
Dalla mia prova al di sotto mi sto trovando che se nessun match è l'intervallo NSCheckingResult
trovato è impostato su {0,0}
. È un piccolo punto, ma volevo solo chiarire la mia comprensione di come funzioni.
// 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: In questo esempio NSTextCheckingResult *match
viene impostato su nil
, che è probabilmente perché la posizione e la lunghezza stanno tornando zero (messaggio a oggetto nil).
if(!match) NSLog(@"Match Not Found");
Sono quindi indovinando che NSNotFound
viene restituito solo quando ci sono più gruppi di cattura, dove rappresentano un gruppo vuoto.
Sì, è a causa della corrispondenza Null. '{NSNotFound, 0}' può essere restituito da 'rangeAtIndex:' per il gruppo che non ha partecipato alla partita. – hoha
@hoha se si sposta il commento in una risposta, quindi fuzzygoat potrebbe accettarlo e spostare questa domanda fuori dalla coda senza risposta. –