-1

我正在尝试使用以下模式。

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#{{[[[0-9]{1,10}-[0-9]{1,10}-[0-9]{1,10}]]}}" options:0 error:&error];
NSString *originalMesssage = @"test  #{{[[8-16-5]]}}";
NSArray *arrResults = [regex matchesInString:originalMesssage options:NSRegularExpressionCaseInsensitive
                                       range:NSMakeRange(0, [originalMesssage length])];

在使用上述正则表达式过滤后,我希望“8-16-5”作为返回值。显然问题出在“{}”和“[]”字符上。我用http://regexpal.com/测试了相同的模式,它在那里工作正常。1)我应该在上面的代码中使用任何通配符吗?

参考:NSRegularExpression

以下是最终对我有用的代码。

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#\\{\\{\\[\\[[0-9]{1,10}-[0-9]{1,10}-[0-9]{1,10}\\]\\]\\}\\}" options:0 error:&error];
NSString *originalMesssage = @"test  #{{[[8-16-5]]}}";
NSArray *arrResults = [regex matchesInString:originalMesssage options:NSRegularExpressionCaseInsensitive
                                       range:NSMakeRange(0, [originalMesssage length])];


NSTextCheckingResult *match = [arrResults objectAtIndex:0];
NSRange matchRange = [match range];
NSString *resultString = [originalMesssage substringWithRange:matchRange];
4

1 回答 1

3

[、和字符在正则表达式中具有特殊含义]。你需要逃避它们:{}

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\#\\{\\{\\[\\[[0-9]{1,10}-[0-9]{1,10}-[0-9]{1,10}\\]\\]\\}\\}" options:0 error:&error];
NSString *originalMesssage = @"test  #{{[[8-16-5]]}}";
NSArray *arrResults = [regex matchesInString:originalMesssage options:NSRegularExpressionCaseInsensitive
                                       range:NSMakeRange(0, [originalMesssage length])];
于 2013-02-23T18:43:05.120 回答