Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
objective-c中的字符串搜索_Objective C_String_Parsing_Nsstring - Fatal编程技术网

objective-c中的字符串搜索

objective-c中的字符串搜索,objective-c,string,parsing,nsstring,Objective C,String,Parsing,Nsstring,给定如下字符串: http://files.domain.com/8aa55fc4-3015-400e-80f5-390997b43cf9/c07cb0d2-b7d7-4bfd-b0c3-6f43571e3c29-MyFile.jpg 我需要找到字符串“MyFile”,并告诉它是什么类型的图像(.jpg或.png)。我怎样才能做到这一点 我唯一能想到的是向后搜索前四个字符以获得文件扩展名,然后继续向后搜索,直到找到第一个连字符,并假设文件名本身没有任何连字符。但我不知道怎么做。有更好的方法吗?

给定如下字符串:

http://files.domain.com/8aa55fc4-3015-400e-80f5-390997b43cf9/c07cb0d2-b7d7-4bfd-b0c3-6f43571e3c29-MyFile.jpg
我需要找到字符串“MyFile”,并告诉它是什么类型的图像(.jpg或.png)。我怎样才能做到这一点


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

[myString lastPathComponent]
将获取文件名。
[myString路径扩展]
将获得扩展名

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

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

- (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];
}

[myString lastPathComponent]
将获取文件名。
[myString路径扩展]
将获得扩展名

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

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

- (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];
}

如果NSString对象中有该字符串,或者从该字符串创建该字符串,则可以使用rangeOfString方法来完成这两个操作


有关更多详细信息,请参阅

如果NSString对象中有该字符串,或者从该字符串创建该字符串,则可以使用rangeOfString方法同时完成这两个操作

有关更多详细信息,请参阅

用于搜索文件名。搜索模式实际上取决于您对文件名的了解。如果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);
用于搜索文件名。搜索模式实际上取决于您对文件名的了解。如果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);

[string pathExtension]
-对于扩展,您是否尝试过阅读NSString的规范?这里有很多函数可以使用。
[string path extension]
-对于扩展,您是否尝试过阅读NSString的规范?这里有很多函数可以使用。就我个人而言,我只需要做
[[filename componentsSeparatedByString:@“-“]lastObject]
。但我很懒,这是个好主意。不过,我认为我们仍然需要切断那个分机。可以执行另一个由字符串@“.”分隔的组件,然后获取objectAtIndex:0。这很可爱。NSRangeMake抛出“函数‘NSRangeMake’的隐式声明在C99中无效。但使用Chucks的解决方案结合lastPathComponent似乎可行。是的。对不起。它是NSMakerRange。这一个结构布局函数不遵循苹果的标准模式。将进行编辑。其余的应该可以。就我个人而言,我只需执行
[[filename ComponentSeparatedByString:@“-“]lastObject]
。但我很懒。这是一个好主意。不过,我认为我们仍然需要删除该扩展名。可以执行另一个ComponentSeparatedByString:@.”,然后获取objectAtIndex:0。这很可爱。NSRangeMake抛出函数“NSRangeMake”的隐式声明在C99中无效。但使用Chucks的解决方案与lastPathComponent组合似乎有效。是的。抱歉。它是NSMakerRange。此结构布局函数不遵循apple的标准模式。将进行编辑。其余的应该可以工作。搜索
@(MyFile)\\(jpg;png)$可能更好
。更精确一点。这只适用于名为“MyFile”的文件,对吗?它可以是任何不包含连字符的名称。可能最好搜索
@-(MyFile)\\(jpg | png)$”
。更精确一点。这只适用于名为“MyFile”的文件,但对吗?它可以是任何不包含连字符的名称。