gpt4 book ai didi

ios - 在NSPredicate和ISBN数字示例中使用正则表达式感到困惑

转载 作者:行者123 更新时间:2023-12-01 18:16:56 24 4
gpt4 key购买 nike

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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com