【问题标题】:How to get some spesific string from a NSString?如何从 NSString 中获取一些特定的字符串?
【发布时间】:2014-12-03 03:56:54
【问题描述】:

你好,我有一个这样的 NSString

#EXTM3U #EXT-X-版本:3 #EXT-X-允许缓存:否 #EXT-X-TARGETDURATION:11 #EXT-X-媒体序列: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){
}

但是这里块的内部代码不能执行。那有什么问题?以及如何获取这些文件名?

【问题讨论】:

标签: ios regex nsstring


【解决方案1】:
\S+\.mp3

试试这个。查看演示。

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

【讨论】:

  • 如何在ios中给出这个正则表达式?
  • 因为它仍然跳过块
  • @user2889249 为什么会跳过这个块
  • 我认为它会跳过,因为它不完全采用正则表达式
  • @user2889249 你是逐行提供输入吗?你可以一次性传过去
【解决方案2】:

我不擅长正则表达式,所以我用另一种方式来做。 试试这个代码

   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"
)

【讨论】:

  • .mp3 文件时常变化,因此不能硬编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 2011-04-24
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多