如何从NSString中提取某些内容

时间:2012-03-12 17:47:03

标签: objective-c nsstring

我有NSString这样:

<param name=\"movie\" value=\"system/swf/miniplayer.swf\"> 
param name=\"FlashVars\"
value=\"playerID=1&amp;soundFile=audios/programAudios/f37070041634e8d19316422e3ffad4c9.mp3\"   
<param name=\"quality\" value=\"high\"  
<param name=\"menu\" value=\"false\" 
<param name=\"wmode\" value=\"transparent\"
<embed src=\"system/swf/miniplayer.swf\" width=\"180\" height=\"30\" 
flashvars=\"playerID=1&amp;soundFile=audios/programAudios/f37070041634e8d19316422e3ffad4c9.mp3\ 
quality=\"high\" menu=\"false\" wmode=\"transparent\"                          ",

如何提取 audios / programAudios / f37070041634e8d19316422e3ffad4c9.mp3

2 个答案:

答案 0 :(得分:1)

您的数据看起来不正确,假设它代表一些XML字符串。假设 XML并且每个'param'都以>正确结束,您可以使用正则表达式来解析必要的信息。我在下面展示了一些伪代码,你可以根据自己的需要进行调整。请注意,此示例假定输入字符串中可能有多个soundFile部分。

NSString *data = @"param name=\"FlashVars\" value=\"playerID=1&amp;soundFile=audios/programAudios/f37070041634e8d19316422e3ffad4c9.mp3>\"";

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression         
                                regularExpressionWithPattern:@"(soundFile=)(.+)(>)"
                                options:NSRegularExpressionCaseInsensitive
                                error:&error];
if(error == NULL) {
    NSLog(@"Number of capture groups: %lu\n", [regex numberOfCaptureGroups]);

    NSArray *matches = [regex matchesInString:data options:0 range:NSMakeRange(0, [data length])];
    for (NSTextCheckingResult *match in matches) {
        NSRange rangeOfInterest = [match rangeAtIndex:2];
        NSLog(@"Sound file: %@\n", [data substringWithRange: rangeOfInterest]);
    }
} else {
    // handle error
}

您可以在documentation page上阅读有关Cocoa对正则表达式的支持的更多信息。另请注意,使用XML解析器和XPath查询来检索此信息可能更合适,但在这种情况下,正则表达式可以很好地完成工作。

答案 1 :(得分:0)

NSArray *names = [nameString componentsSeparatedByString:@"soundFile="];

第二 * 名称 *的索引将是您的路径,但您需要切割其他部分 一个快速的方法是

NSArray *path = [nameString componentsSeparatedByString:@"\"];

第一个路径索引是您的答案

不是完美的编码示例,但它有效:)