我已经声明了NSRegularExpression。例如[0-9]{1,4}|abc|ABC。然后输入NSString: @"123"。如果我检查NSTextCheckingResult,它不是零。所以我知道字符串与正则表达式匹配。但是,我是否可以了解有关哪个部分的更多信息?对于这种情况,我知道正则表达式[0-9]{1,4}是匹配的。我怎样才能做到这一点?谢谢!

最佳答案

如果我正确理解了您的问题,则必须使用
捕获组(...)

NSString *pattern = @"([0-9]{1,4})|(abc)|(ABC)";


如果字符串与模式中的第一个捕获组匹配
然后

[result rangeAtIndex:1]


将是匹配子字符串的范围,而

[result rangeAtIndex:2]
[result rangeAtIndex:3]


range.location == NSNotFound。例:

NSString *pattern = @"([0-9]{1,4})|(abc)|(ABC)";
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];

NSString *str = @"123";
NSTextCheckingResult *result = [regex firstMatchInString:str options:0 range:NSMakeRange(0, str.length)];

NSLog(@"%@", NSStringFromRange([result rangeAtIndex:1])); // {0, 3}
NSLog(@"%@", NSStringFromRange([result rangeAtIndex:2])); // {9223372036854775807, 0}
NSLog(@"%@", NSStringFromRange([result rangeAtIndex:3])); // {9223372036854775807, 0}

关于ios - 我怎么知道正则表达式的哪一部分与Objective-c相匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34555629/

10-11 22:54
查看更多