Свойство NSCheckingResult Range не установлено в {NSNotfound, 0}? - PullRequest
6 голосов
/ 09 февраля 2012

При просмотре документов для NSTextCheckingResult у меня сложилось впечатление, что, если при поиске NSRegularExpression не найдено совпадений, свойство диапазона для NSCheckingResult будет установлено на {NSNotFound,0}

Отмой тест ниже, я обнаружил, что если не найдено совпадений, диапазон NSCheckingResult устанавливается на {0,0}.Это небольшой вопрос, но я просто хотел уточнить мое понимание того, как это работает.

// 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

РЕДАКТИРОВАТЬ: В этом примере NSTextCheckingResult *match устанавливается на nil, что, вероятно, поэтому местоположение идлина возвращают ноль (сообщение для нулевого объекта).

if(!match) NSLog(@"Match Not Found");

Поэтому я предполагаю, что NSNotFound возвращается только при наличии нескольких групп захвата, где она представляет пустую группу.

1 Ответ

2 голосов
/ 02 июня 2012

Да, это из-за нулевого совпадения.{NSNotFound, 0} может быть возвращено rangeAtIndex: для группы, которая не участвовала в матче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...