2012-02-09 6 views
6

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.

+0

Sì, è a causa della corrispondenza Null. '{NSNotFound, 0}' può essere restituito da 'rangeAtIndex:' per il gruppo che non ha partecipato alla partita. – hoha

+0

@hoha se si sposta il commento in una risposta, quindi fuzzygoat potrebbe accettarlo e spostare questa domanda fuori dalla coda senza risposta. –

risposta

2

Sì, è a causa della corrispondenza nulla. {NSNotFound, 0} può essere restituito da rangeAtIndex: per il gruppo che non ha partecipato alla partita.

Problemi correlati