我需要检查我的字符串是否匹配此正则表达式模式:\+?\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
。也许我搞砸了反斜杠或引号。我做错了什么?
答案 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");
}