6

のドキュメントを見ると、検索で一致するものが見つからなかった場合、の範囲プロパティは次のように設定されるNSTextCheckingResultという印象を受けました。NSRegularExpressionNSCheckingResult{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います。これが、場所と長さがゼロを返している理由です(nilオブジェクトへのメッセージ)。

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

したがってNSNotFound、空のグループを表すキャプチャグループが複数ある場合にのみ返されると思います。

4

1 に答える 1

2

はい、それは null 一致のためです。試合に参加しなかったグループは{NSNotFound, 0}で返却できます。rangeAtIndex:

于 2012-06-02T11:49:36.490 に答える