2011-08-07 37 views
2

我有一些文本被加載到NSString對象中,其中包含方括號中的註釋 - 我需要去掉方括號和它們中的所有內容,以便用戶僅顯示正文文本。在NSString中搜索方括號

但是,由於Objective-C依賴方括號來進行消息傳遞等,所以我在刪除它們時遇到了一些問題。

是否有一些使用方括號的特殊轉義字符(例如作爲'rangeOfString:'的參數)? Xcode反覆告訴我,沒有。

乾杯

回答

3

您可以使用正則表達式來刪除子你想:

NSString *s = @"hi[bla]tototo[lalA123]a"; 
NSString *result = [s stringByReplacingOccurrencesOfString:@"\\[[\\w]+\\]" 
               withString:@"" 
                options:NSRegularExpressionSearch|NSCaseInsensitiveSearch 
                range:NSMakeRange(0, [s length])]; 
NSLog(@"%@", result); 
// output "hitototoa" 

附:您可能需要調整正則表達式模式,如果您的註釋可能包含不符合'\ w'說明符的字符

+0

絕對在錢上,奇妙的東西人感謝你。 –

1

你的意思是像@"["@"]"

Objective-C中的任何字符串必須在@""之間。

+0

如果你有一個NSString在它兩個字符@「[篩選]」,那麼它可能會導致問題(例如,如果你使用它作爲參數傳遞給rangeOfString :),這是我需要做的。 –

+0

真的不應該有任何問題@「」除了一個「非轉義」的標誌,你可以發佈你的代碼和你通過它運行的字符串嗎? –

0

我認爲弗拉基米爾基於正則表達式的答案很好,但我想解決關於使用rangeOfString的觀點,因爲OP聽起來很混亂。在NSString中使用方括號沒有問題,這與Objective C使用方括號進行消息傳遞無關。

這對我工作得很好:

NSString * a = @"Some [thing] here"; 
NSRange rangeOpen = [a rangeOfString:@"["]; 
NSRange rangeClose = [a rangeOfString:@"]"]; 
NSLog(@"%lu %lu, %lu %lu.", 
     (unsigned long)rangeOpen.location, 
     (unsigned long)rangeOpen.length, 
     (unsigned long)rangeClose.location, 
     (unsigned long)rangeClose.length); 
# Logs "5 1, 11 1."