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

Daw*_*son 6 cocoa-touch objective-c ios

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

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

Vik*_*ica 4

NSString *regEx = @"[a-z]+-[0-9]+.+jpg"; 
Run Code Online (Sandbox Code Playgroud)

将会失败butter.jpg,因为它需要有一个-并且至少有一个数字。

NSString *regEx = @"[a-z]+(-[0-9]+){0,1}.jpg"; 
Run Code Online (Sandbox Code Playgroud)

如果你这样做

NSString *regEx = @"([a-z])+(?:-([0-9])+){0,1}.jpg"; 
Run Code Online (Sandbox Code Playgroud)

您可以稍后以捕获组的形式访问您可能希望获得的信息。

(...) |捕获括号。匹配括号内的子表达式的输入范围在匹配后可用。

如果您不需要捕获组

NSString *regEx = @"(?:[a-z])+(?:-[0-9]+){0,1}.jpg"; 
Run Code Online (Sandbox Code Playgroud)

(?:...)| 非捕获括号。对包含的模式进行分组,但不提供匹配文本的捕获。比捕获括号更有效。