我试图区分2个文件(NSString格式).据我所知,这可以通过比较和匹配正则表达式来完成.我拥有的2个jpg文件的格式是:
butter.jpg
黄油1.JPG
我的问题是我可以编写正则表达式来匹配上面的2个字符串吗?我已经搜索并找到了一个示例表达式,但我不确定它是如何阅读并认为它是错误的.
这是我的代码:
NSString *exampleFileName = [NSString stringWithFormat:@"butter-1.jpg"];
NSString *regEx = @".*l{2,}.*";
NSPredicate *regExTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regEx];
if ([regExTest evaluateWithObject:exampleFileName] == YES) {
NSLog(@"Match!");
} else {
NSLog(@"No match!");
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我尝试使用以下内容:
NSString *regEx = @"[a-z]+-[0-9]+.+jpg";
Run Code Online (Sandbox Code Playgroud)
尝试匹配:
NSString *exampleFileName = [NSString stringWithFormat:@"abcdefg-112323.jpg"];
Run Code Online (Sandbox Code Playgroud)
经测试:
abc-11.jpg(匹配)
abcsdas-.jpg(不匹配)
abcdefg11.(不匹配)
abcdefg-3123.jpg(匹配)
截至目前它是有效的,但我想消除它可能没有的任何机会,任何输入?
参考以下问题:将NSData转换为HEX NSString
我使用Erik Aigner提供的解决方案解决了这个问题,即:
NSData *data = ...;
NSUInteger capacity = [data length] * 2;
NSMutableString *stringBuffer = [NSMutableString stringWithCapacity:capacity];
const unsigned char *dataBuffer = [data bytes];
NSInteger i;
for (i=0; i<[data length]; ++i) {
[stringBuffer appendFormat:@"%02X", (NSUInteger)dataBuffer[i]];
}
Run Code Online (Sandbox Code Playgroud)
但是,有一个小问题,如果后面有额外的零,则字符串值会有所不同.例如.如果hexa数据是字符串@"3700000000000000",则使用扫描程序转换为整数时:
unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:stringBuffer];
[scanner scanHexInt:&result];
NSLog(@"INTEGER: %u",result);
Run Code Online (Sandbox Code Playgroud)
结果将是4294967295,这是不正确的.不应该是55,因为只有hexa 37被采取?
那么如何摆脱零呢?
编辑:(回应CRD)
嗨,谢谢你澄清我的疑虑.那你要做的是直接从一个字节指针读取64位整数吧?不过我有另一个问题.你如何实际将NSData转换为字节指针?
为了让您更容易理解,我将解释我最初的所作所为.
首先,我显示了我拥有的文件的数据(数据是十六进制)
NSData *file = [NSData dataWithContentsOfFile:@"file path here"];
NSLog(@"Patch File: %@",file);
Run Code Online (Sandbox Code Playgroud)
输出:

接下来,我读取并偏移文件的前8个字节并将它们转换为字符串.
// 0-8 bytes
[file seekToFileOffset:0];
NSData *b …Run Code Online (Sandbox Code Playgroud)