2015-10-20 100 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

另外:你的轉義被打破:'@「\\ [。*?\\]」' –