“\ P {Letter}”和NSRegularExpression

时间:2013-03-15 10:21:27

标签: ios objective-c regex xcode nsregularexpression

我有一个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是一个未知的转义序列......

2 个答案:

答案 0 :(得分:1)

你需要两个反斜杠:

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

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

检查“仅限字母”的一个更简单的解决方案是

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

答案 1 :(得分:0)

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

regularExpressionWithPattern:@"\\P{Letter}"