我有NSString
这样:
<param name=\"movie\" value=\"system/swf/miniplayer.swf\">
param name=\"FlashVars\"
value=\"playerID=1&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&soundFile=audios/programAudios/f37070041634e8d19316422e3ffad4c9.mp3\
quality=\"high\" menu=\"false\" wmode=\"transparent\" ",
如何提取 audios / programAudios / f37070041634e8d19316422e3ffad4c9.mp3 ?
答案 0 :(得分:1)
您的数据看起来不正确,假设它代表一些XML字符串。假设 是 XML并且每个'param'都以>
正确结束,您可以使用正则表达式来解析必要的信息。我在下面展示了一些伪代码,你可以根据自己的需要进行调整。请注意,此示例假定输入字符串中可能有多个soundFile
部分。
NSString *data = @"param name=\"FlashVars\" value=\"playerID=1&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:@"\"];
第一个路径索引是您的答案
不是完美的编码示例,但它有效:)