2012-02-09 3 views
6

NSTextCheckingResult के लिये दस्तावेज को देख से मैं छाप अगर एक NSRegularExpression खोज में कोई मुकाबला नहीं मिला था NSCheckingResult के लिए सीमा संपत्ति अपने परीक्षण से {NSNotFound,0}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 केवल जब वहाँ कई कैप्चर समूहों जहां यह एक खाली समूह का प्रतिनिधित्व कर रहे हैं लौटाया जाता है।

+0

हां यह शून्य मैच की वजह से है। '{NSNotFound, 0} 'को' श्रेणी एट इंडेक्स: 'द्वारा वापस किया जा सकता है, जो उस समूह के लिए है जो मैच में भाग नहीं लेता था। – hoha

+0

@ होहा अगर आप अपनी टिप्पणी को किसी उत्तर में ले जाते हैं, तो फ़ज़ीगोगोट इसे स्वीकार कर सकता है और इस प्रश्न को अनुत्तरित कतार से बाहर ले जा सकता है। –

उत्तर

2

हां यह शून्य मैच की वजह से है। {NSNotFound, 0} को उस समूह के लिए rangeAtIndex: द्वारा वापस किया जा सकता है, जो मैच में भाग नहीं लेता था।

संबंधित मुद्दे