如何知道正则表达式的哪一部分与Objective-c匹配

时间:2016-01-01 11:12:13

标签: ios objective-c regex

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

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你必须使用 捕获论坛 (...)

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}

答案 1 :(得分:0)

⇧⌘0并键入NSTextCheckingResult - 点击符号以获取类定义。

有属性rangeresultTypenumberOfRanges等等。

或致电rangeOfFirstMatchInString:options:range实例上的NSRegularExpression直接获取范围。