Apple文档在描述如何在NSPredicate中使用正则表达式时给出了一个示例。
NSArray *isbnTestArray = @[@"123456789X", @"987654321x", @"1234567890", @"12345X", @"1234567890X"];
NSPredicate *isbnPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '\\\\d{10}|\\\\d{9}[Xx]'"];
NSArray *isbnArray = [isbnTestArray filteredArrayUsingPredicate:isbnPredicate];
我的问题是为什么它使用
\\\\d
而不使用\\d
或\d
?
最佳答案
\d
。 '…'
中的文字字符串内,每个反斜杠都必须转义,因此您得到\\d
。 NSString
中定义的,因此必须再次转义反斜杠,并且您会得到\\\\d
。 如果在谓词中使用
%@
格式而不是文字字符串,则可以避免一个转义步骤:NSString *pattern = @"\\d{10}|\\d{9}[Xx]";
NSPredicate *isbnPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
通常,对谓词中的所有可变部分使用
%@
会更好,因为它可以避免各种报价和转义问题。
关于ios - 在NSPredicate和ISBN数字示例中使用正则表达式感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21015930/