2014-03-06 16 views
0

我们如何从获取子:如何获得使用2个封装字符的子字符串?

NSString *string = @"exmple string [image]"; 

,我们要提取字符串之间的“[”和“]”。

我想用NSRange具有:

NSRange rangeStart = [title rangeOfString:@"[" options:NSLiteralSearch]; 
NSRange rangeEnd = [title rangeOfString:@"]" options:NSLiteralSearch]; 

,但我似乎无法找到这个解决方案。

+1

这是正确的开始。使用这两个范围的结果来获取子字符串。 – rmaddy

回答

1

变型1:

NSRange rangeStart = [title rangeOfString:@"[" options:NSLiteralSearch]; 
NSRange rangeEnd = [title rangeOfString:@"]" options:NSLiteralSearch]; 
substring = [your_string substringWithRange:NSMakeRange(rangeStart.location + 1, rangeEnd.location - rangeStart.location - 1)]; 

变体2:

NSArray *ar = componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[]"]; 
substring = ar[1]; 
+0

这将打破像“ABC] CDEF [”... –

0

用法FO正则表达式(正则表达式)是去这种类型的事情的方式:

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

NSString *str = @"example string [image]"; 
NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:str options:0 range:NSMakeRange(0, [str length])]; 
NSString *substringForFirstMatch; 
if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) { 
     substringForFirstMatch = [str substringWithRange:NSMakeRange(rangeOfFirstMatch.location + 1, rangeOfFirstMatch.length - 2)]; 
    } 

NSLog(@"%@", substringForFirstMatch); // will print image