正则表达式模式在Objective-C中不起作用
我需要检查我的字符串是否匹配此正则表达式模式:正则表达式模式在Objective-C中不起作用,objective-c,regex,string,match,Objective C,Regex,String,Match,我需要检查我的字符串是否匹配此正则表达式模式:\+?\d{0,3} (这个模式已经在这里测试过了:看起来还不错。) 我就是这么做的: NSString * proposedNewString = @"+3"; NSString * pattern = @"\\+?\\d{0,3}"; NSError * err = nil; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pa
\+?\d{0,3}
(这个模式已经在这里测试过了:看起来还不错。)
我就是这么做的:
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");
}
我希望它打印出是
,但出于某种原因,它打印出否
。也许我弄错了反斜杠或引号。我做错了什么?谓词格式中的“MATCHES”运算符期望作为参数的模式字符串,
不是正则表达式(并且不能将%@
括在引号中)。
因此,这将产生预期结果“是”:
或者,例如,使用NSRegularExpression
方法之一,而不是谓词
if ([regex numberOfMatchesInString:proposedNewString options:0 range:NSMakeRange(0, [proposedNewString length])] > 0) {
NSLog(@"yes");
} else {
NSLog(@"no");
}
当我没有附上
%@
时,我的应用程序崩溃,出现消息2014-09-01 19:48:30.518 MyApp[6686:60b]建议的str=+3
2014-09-01 19:48:30.520 MyApp[6686:60b]***由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:“无法从对象\+?\d{0,3}创建正则表达式”0x1.
但在我对您的numberOfMathInstring:options:range
进行了更改之后,它似乎可以工作了。所以非常感谢你的帮助。@MikhailZinkovsky:请再看一下我答案的第一部分。对于predicateWithFormat
,必须传递模式字符串pattern
,而不是正则表达式regex
。我已经测试了那个代码,它对我有效。是的,你完全正确,这是我愚蠢的失败。多谢各位。
if ([regex numberOfMatchesInString:proposedNewString options:0 range:NSMakeRange(0, [proposedNewString length])] > 0) {
NSLog(@"yes");
} else {
NSLog(@"no");
}