0

给定这样的字符串:

http://files.domain.com/8aa55fc4-3015-400e-80f5-390997b43cf9/c07cb0d2-b7d7-4bfd-b0c3-6f43571e3c29-MyFile.jpg

我只需要找到字符串“MyFile”,并告诉它是什么类型的图像(.jpg 或 .png)。我怎样才能做到这一点?

我唯一能想到的就是向后搜索前四个字符以获得文件扩展名,然后继续向后搜索直到找到第一个连字符,并假设文件名本身没有任何连字符。但我不知道该怎么做。有没有更好的办法?

4

3 回答 3

3

用于NSRegularExpression搜索文件名。搜索模式实际上取决于您对文件名的了解。如果 MyFile 之前的“随机”数字和字符具有已知格式,您可以将其考虑在内。我在下面的建议假设文件名不包含任何减号。

NSRegularExpression *regex = [NSRegularExpression 
                     regularExpressionWithPattern:@"-([:alnum:]*)\\.(jpg|png)$"
                                          options:NSRegularExpressionSearch
                                            error:nil];
// Get the match between the first brackets.
NSTextCheckingResult *match = [regex firstMatchInString:string options:0 
                                         range:NSMakeRange(0, [string length])];
NSRange matchRange = [match rangeAtIndex:1];
NSString *fileName = [string substringWithRange:matchRange];
NSLog(@"Filename: %@", fileName);

// Get the extension with a simple NSString method.
NSString *extension = [string pathExtension];
NSLog(@"Extension: %@", extension);
于 2012-09-12T19:26:32.143 回答
2

[myString lastPathComponent]将获得文件名。 [myString pathExtension]将获得扩展名。

要获得文件名的后缀,我认为您必须滚动自己的解析。它总是在最后一个破折号之后和扩展之前的字符串吗?

如果是这样,这里有一个想法:

- (NSString *)lastLittleBitOfTheFilenameFrom:(NSString *)filename {

    NSInteger fnStart = [filename rangeOfString:@"-" options:NSBackwardsSearch].location + 1;
    NSInteger fnEnd = [filename rangeOfString:@"." options:NSBackwardsSearch].location;

    // might need some error checks here depending on what you expect in the original url
    NSInteger length = fnEnd - fnStart;

    return [filename substringWithRange:NSMakeRange(fnStart, length)];
}

或者,感谢@Chuck ...

// even more sensitive to unexpected input, but nice and tiny ...

- (NSString *)lastLittleBitOfTheFilenameFrom:(NSString *)filename {
    NSString *nameExt = [[filename componentsSeparatedByString:@"-"] lastObject];
    return [[nameExt componentsSeparatedByString:@"."] objectAtIndex:0];
}
于 2012-09-12T19:21:33.133 回答
0

如果您在 NSString 对象中有字符串,或者从该字符串创建它,您可以使用 rangeOfString 方法来完成两者。

有关更多详细信息,请参阅https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

于 2012-09-12T19:22:00.227 回答