小编Daw*_*son的帖子

匹配正则表达式与字符串(文件名)

我试图区分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(匹配)

截至目前它是有效的,但我想消除它可能没有的任何机会,任何输入?

cocoa-touch objective-c ios

6
推荐指数
1
解决办法
1497
查看次数

将NSData转换为Hex NSString

参考以下问题:将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)

cocoa hex objective-c nsdata nsscanner

5
推荐指数
1
解决办法
3518
查看次数

标签 统计

objective-c ×2

cocoa ×1

cocoa-touch ×1

hex ×1

ios ×1

nsdata ×1

nsscanner ×1