如何从NSString获取一些特定的字符串?

时间:2014-12-03 03:56:54

标签: ios regex nsstring

你好,我有一个像这样的NSString

 #EXTM3U
 #EXT-X-VERSION:3
 #EXT-X-ALLOW-CACHE:NO
 #EXT-X-TARGETDURATION:11
 #EXT-X-MEDIA-SEQUENCE:2933
 #EXTINF:10.031,
 media_w687716935_2933.mp3
 #EXTINF:10.031,
 media_w687716935_2934.mp3
 #EXTINF:10.031,
 media_w687716935_2935.mp3

从这个字符串我想得到所有的.mp3文件。我怎样才能做到这一点?请帮帮我。

由于

更新

我这样说

 NSRegularExpression *regex2 = [NSRegularExpression regularExpressionWithPattern:@"\\w+(?=\\.mp3)" options:NSRegularExpressionCaseInsensitive error:&error];

[regex2 enumerateMatchesInString:strM3u81 options:0 range:NSMakeRange(0, [strM3u81 length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
}

但这里的块的内部代码不是例外。这有什么不对吗?以及如何获取这些文件名?

2 个答案:

答案 0 :(得分:1)

\S+\.mp3

试试这个。看看演示。

http://regex101.com/r/yR3mM3/21

答案 1 :(得分:0)

我在正则表达方面表现不佳,所以我以另一种方式表达。 试试这段代码

   NSString *input = @"#EXTM3U\n #EXT-X-VERSION:3\n #EXT-X-ALLOW-CACHE:NO\n #EXT-X-TARGETDURATION:11\n #EXT-X-MEDIA-SEQUENCE:2933\n #EXTINF:10.031,\n media_w687716935_2933.mp3\n #EXTINF:10.031,\n media_w687716935_2934.mp3\n #EXTINF:10.031,\n media_w687716935_2935.mp3";
   NSArray *subBreakingLineStrings = [input componentsSeparatedByString:@"\n"];

    NSMutableArray *results = [NSMutableArray new];
    for (NSString *subString in subBreakingLineStrings) {
        if ([subString rangeOfString:@".mp3"].location != NSNotFound) {
            [results addObject:subString];
        }
    }

    NSLog(@"result = %@", results);

输出:

result = (
    " media_w687716935_2933.mp3",
    " media_w687716935_2934.mp3",
    " media_w687716935_2935.mp3"
)