Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式模式在Objective-C中不起作用_Objective C_Regex_String_Match - Fatal编程技术网

正则表达式模式在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");
}