捕获组正则表达式 NSRegularExpression iOS
Captured group regex NSRegularExpression iOS
我正在尝试执行以下正则表达式:^($.)([\d]{1,10})?
$C14325
字符串在 https://regex101.com 处的结果是 [0-2]:"$C"
和 [2-7]:"14325"
。
但是,当我使用 NSRegularExpression
执行以下代码时,它 returns 作为单个匹配项,而不是一个组。
基本上,我正在尝试对这些结果进行分组,并找到一种方法使结果与哪个正则表达式相对应。
NSString *regexStr=@"^(\$.)([\d]{1,10})?";
NSString *inputStr=@"$C14325";
NSError *regexError;
NSRegularExpression *aRegx=[NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:®exError];
NSArray *results=[aRegx matchesInString:inputStr options:0 range:NSMakeRange(0, inputStr.length)];
在 Named capture groups with NSRegularExpression 有答案,但我认为 rangeAtIndex
如果找不到值会抛出异常。
您的正则表达式部分正确。您需要做的就是在 results
:
中迭代匹配项
for (NSTextCheckingResult *match in results) {
NSRange matchRange = [match range];
NSRange first = [match rangeAtIndex:1];
NSRange second = [match rangeAtIndex:2];
NSLog(@"1:%@ 2:%@.", [NSValue valueWithRange:first], [NSValue valueWithRange:second]);
}
1:NSRange: {0, 2} 2:NSRange: {2, 5}.
我正在尝试执行以下正则表达式:^($.)([\d]{1,10})?
$C14325
字符串在 https://regex101.com 处的结果是 [0-2]:"$C"
和 [2-7]:"14325"
。
但是,当我使用 NSRegularExpression
执行以下代码时,它 returns 作为单个匹配项,而不是一个组。
基本上,我正在尝试对这些结果进行分组,并找到一种方法使结果与哪个正则表达式相对应。
NSString *regexStr=@"^(\$.)([\d]{1,10})?";
NSString *inputStr=@"$C14325";
NSError *regexError;
NSRegularExpression *aRegx=[NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:®exError];
NSArray *results=[aRegx matchesInString:inputStr options:0 range:NSMakeRange(0, inputStr.length)];
在 Named capture groups with NSRegularExpression 有答案,但我认为 rangeAtIndex
如果找不到值会抛出异常。
您的正则表达式部分正确。您需要做的就是在 results
:
for (NSTextCheckingResult *match in results) {
NSRange matchRange = [match range];
NSRange first = [match rangeAtIndex:1];
NSRange second = [match rangeAtIndex:2];
NSLog(@"1:%@ 2:%@.", [NSValue valueWithRange:first], [NSValue valueWithRange:second]);
}
1:NSRange: {0, 2} 2:NSRange: {2, 5}.