2014-12-05 105 views
0

說我有很多不同的字符串:如何使用NSRegularExpression提取字符串的特定部分?

"http://website.com/283/comments/einp43/2398/32/34/23/4/4" 
"http://website.com/23283/l34/comments/inhd3/3928/3/2/3" 
"http://website.com/pics/283/comments/en43/a89st/389238/a823/" 
"http://website.com/pics/hd/283/comments/as87/asd7j/3" 

而且我總是想跟隨comments/這是一個有價值的ID的部分。但我不想要評論部分,我只想要ID。

如何分離/提取?

回答

4

假設網站名稱存儲爲稱爲NSStringwebsiteName

NSArray *components = [websiteName componentsSeparatedByString:@"comments/"]; 
NSString *valuableID = [components lastObject]; 

(編輯:我沒有注意到的標題NSRegularExpression提,直到發佈這個答案後,但我不認爲正則表達式是必要的,這種情況下,因爲你正在尋找一個常量字符串,而且不需要複雜的模式識別。)

+0

哇,這是一個非常聰明的解決方案。 – 2014-12-05 03:16:27

+0

@DougSmith謝謝:)我認爲這是一個非常標準的方式來解決它雖然 – 2014-12-05 03:20:19

+0

@DougSmith沒有注意到你在標題中直到現在提到的正則表達式...我不認爲正則表達式是真正必要的這是因爲你正在尋找一個常量字符串而不是一個模式。 – 2014-12-05 03:21:20

2

你可以用正則表達式做到這一點,試試這個代碼

NSString *string = @"http://website.com/23283/l34/comments/inhd3/3928/3/2/3"; 

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"/comments/([^/]*)" options:NSRegularExpressionCaseInsensitive error:nil]; 
[regex enumerateMatchesInString:string options:0 range:NSMakeRange(0, string.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 
    NSString *subStr = [string substringWithRange:[result rangeAtIndex:1]]; 
    NSLog(@"commentId = %@", subStr); 
}]; 

輸出:

commentId = inhd3 
+0

很好的答案,但我認爲他想要「inhd3/3928/3/2/3」。 – 2014-12-05 19:19:54