6

通过查看文档,NSTextCheckingResult我的印象是,如果在NSRegularExpression搜索中找不到匹配项,则 range 属性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,这可能就是为什么 location 和 length 返回零(消息到 nil 对象)。

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

因此,我猜测NSNotFound只有当有多个捕获组代表一个空组时才会返回。

4

1 回答 1

2

是的,这是因为空匹配。未参加比赛的小组{NSNotFound, 0}可以退还。rangeAtIndex:

于 2012-06-02T11:49:36.490 回答