2015-10-20 68 views
0

是否有一种很好的方法来标记以下字符串?我想获取括号内的字母。目标C:字符串标记化

[快]棕色狐狸跳到[heli] [直升机]上。

我想到的最简单的解决方案是用[将标记初始字符串转换为数组。然后,我会迭代数组,并使用]标记每个项目,并返回第一个项目。为了提高效率,我会在进行更多涉及处理之前检查每个字符串以确保它包含有问题的令牌。

不过,这看起来好像还是业余爱好者。另外,上面的例子将创建5个数组来处理字符串。任何人有想法?

+3

'NSScanner'是你的朋友。前去寻求例子 –

回答

1

一种选择是使用正则表达式搜索您的字符串为希望值:

NSString *myString = @"The [quick] brown fox leaped [onto] the [heli][copter]."; 
NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression   
    regularExpressionWithPattern:@"\\[.*?\\]" 
    options:NSRegularExpressionCaseInsensitive 
    error:&error]; 
[regex enumerateMatchesInString:myString options:0 range:NSMakeRange(0, [myString length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){ 
    //Handle your matches here 
}]; 

https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSRegularExpression_Class/

在这种情况下返回的值仍然会包括括号。如果你只想要的值,你可以删除括号像每个值:

string = [string substringFromIndex:1]; 

string = [string substringToIndex:[string length] - 1]; 

正则表达式可以创建/验证例如:http://www.regexr.com

/编辑:改变正则表达式Nikolai Ruhe在评论中提出的那个。谢谢。

+1

你必须使它不贪心:'\ [。*?\]' –

+1

另外:你的转义被打破:'@“\\ [。*?\\]”' –