【问题标题】:"\P{Letter}" and NSRegularExpression"\P{Letter}" 和 NSRegularExpression
【发布时间】:2013-03-04 00:19:38
【问题描述】:

我有一个 NSString,我想用一个 NSRegularExpression 进行测试,但它的行为与我预期的不同,我不知道在哪里可以找到答案了。

这是我的代码:

    BOOL companyNameContainsOnlyAuthorizedCharacters = YES;

    NSError *error = nil;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[\P{Letter}]" options:0 error:&error];
    NSArray *matches = [[NSArray alloc] init];
    matches = [regex matchesInString:[model editorName] options:0 range:NSMakeRange(0,[[model editorName] length])];

    if ([matches count] > 0) {

        companyNameContainsOnlyAuthorizedCharacters = NO;

    }

据我所知,[\P{Letter}] 应该匹配除字母之外的任何内容。尽管如此,它只匹配字符“\”、“P”、“{”、“L”、“e”、“t”、“r”和“}”。我也试过不带括号[],但它根本不匹配任何东西。

任何帮助将不胜感激,在此先感谢您。

编辑: 此外,xcode 给了我一个警告,提示 \P 是一个未知的转义序列......

【问题讨论】:

  • 你到底想要什么?
  • 我想知道我做错了什么。
  • 你想给出从 A 到 Z 的字母对吗?

标签: ios objective-c regex xcode nsregularexpression


【解决方案1】:

你需要两个反斜杠:

regularExpressionWithPattern:@"[\\P{Letter}]"

因为反斜杠本身需要在字符串中转义。

检查“仅字母”的一种可能更简单的解决方案是

NSString *stringToTest = ...;
NSCharacterSet *letterCharset = [NSCharacterSet letterCharacterSet];
BOOL lettersOnly = [[stringToTest stringByTrimmingCharactersInSet:letterCharset] length] == 0;

【讨论】:

  • @user2006934:不客气。我已经为答案添加了一个替代解决方案,也许它很有用。
【解决方案2】:

你需要两个反斜杠。此外,您不需要将其括在模式括号中。

regularExpressionWithPattern:@"\\P{Letter}"

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 2013-01-29
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 2019-10-16
    • 2012-01-06
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多