正则表达式模式在Objective-C中不起作用

时间:2014-09-01 15:15:30

标签: objective-c regex string match

我需要检查我的字符串是否匹配此正则表达式模式:\+?\d{0,3} (此模式已在此处进行了测试:http://regexpal.com,似乎没问题。)

这就是我的所作所为:

NSString * proposedNewString = @"+3";    
NSString * pattern = @"\\+?\\d{0,3}";
NSError * err = nil;

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&err];
if (err) {
    NSLog(@"Couldn't create regex with given string and options");
    return NO;
}

NSPredicate * myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES '%@'", regex];

NSLog(@"proposed str = %@", proposedNewString);
if ([myTest evaluateWithObject:proposedNewString]) {
    NSLog(@"yes");
}
else {
    NSLog(@"no");
}

我希望它打印出yes,但出于某种原因会打印no。也许我搞砸了反斜杠或引号。我做错了什么?

1 个答案:

答案 0 :(得分:1)

谓词格式的“MATCHES”运算符需要模式字符串作为参数, 不是正则表达式(并且您不能将%@括在引号中)。 所以这会产生预期的结果“是”:

NSString * proposedNewString = @"+3";    
NSString * pattern = @"\\+?\\d{0,3}";
NSPredicate * myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
if ([myTest evaluateWithObject:proposedNewString]) {
    NSLog(@"yes");
} else {
    NSLog(@"no");
}

或者,使用NSRegularExpression方法之一而不是谓词,例如

if ([regex numberOfMatchesInString:proposedNewString options:0 range:NSMakeRange(0, [proposedNewString length])] > 0) {
    NSLog(@"yes");
} else {
    NSLog(@"no");
}