2012-12-04 6 views
7

मैं सभी स्ट्रिंग्स दो अक्षर (या शायद दो टैग) से घिरा हुआ निकालने के लिए की जरूरत हैregex दो charachters या टैग के बीच सभी सबस्ट्रिंग निकालने के लिए

इस मैं अब तक क्या किया है है:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[(.*?)\\]" options:NSRegularExpressionCaseInsensitive error:NULL]; 

    NSArray *myArray = [regex matchesInString:@"[db1]+[db2]+[db3]" options:0 range:NSMakeRange(0, [@"[db1]+[db2]+[db3]" length])] ; 

    NSLog(@"%@",[myArray objectAtIndex:0]); 
    NSLog(@"%@",[myArray objectAtIndex:1]); 
    NSLog(@"%@",[myArray objectAtIndex:2]); 

myArray में सही ढंग से तीन वस्तुओं रहे हैं लेकिन NSLog इस प्रिंट:

<NSSimpleRegularExpressionCheckingResult: 0x926ec30>{0, 5}{<NSRegularExpression: 0x926e660> \[(.*?)\] 0x1} 
<NSSimpleRegularExpressionCheckingResult: 0x926eb30>{6, 5}{<NSRegularExpression: 0x926e660> \[(.*?)\] 0x1} 
<NSSimpleRegularExpressionCheckingResult: 0x926eb50>{12, 5}{<NSRegularExpression: 0x926e660> \[(.*?)\] 0x1} 

DB1, DB2 और db3 के बजाय

जहां मैं गलत हूँ?

धन्यवाद

उत्तर

20

documentationmatchesInString:options:range: रिटर्न NSTextCheckingResult की एक सरणी NSString रों नहीं है के अनुसार। आपको परिणामों पर लूप करना होगा और सबस्ट्रिंग प्राप्त करने के लिए श्रेणियों का उपयोग करना होगा।

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[(.*?)\\]" options:NSRegularExpressionCaseInsensitive error:NULL]; 

NSString *input = @"[db1]+[db2]+[db3]"; 
NSArray *myArray = [regex matchesInString:input options:0 range:NSMakeRange(0, [input length])] ; 

NSMutableArray *matches = [NSMutableArray arrayWithCapacity:[myArray count]]; 

for (NSTextCheckingResult *match in myArray) { 
    NSRange matchRange = [match rangeAtIndex:1]; 
    [matches addObject:[input substringWithRange:matchRange]]; 
    NSLog(@"%@", [matches lastObject]); 
} 
+0

ठीक है, धन्यवाद !! – Janky

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