Захваченное групповое регулярное выражение NSRegularExpression iOS

Я пытаюсь выполнить следующее регулярное выражение: ^(\$.)([\d]{1,10})?

Результат для строки $C14325 на странице https://regex101.com равен [0-2]:"$C" и [2-7]:"14325".

Но когда следующий код выполняется с использованием NSRegularExpression, он возвращается как один соответствующий элемент, а не как группа.

По сути, я пытаюсь сгруппировать эти результаты и найти способ, какой результат соответствует какому регулярному выражению.

NSString *regexStr=@"^(\\$.)([\\d]{1,10})?";
NSString *inputStr=@"$C14325";
NSError *regexError;
NSRegularExpression *aRegx=[NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:&regexError];
NSArray *results=[aRegx matchesInString:inputStr options:0 range:NSMakeRange(0, inputStr.length)];

Был ответ в Именованные группы захвата с NSRegularExpression , но я думаю, что rangeAtIndex вызовет исключение, если не может найти значение.


person NNikN    schedule 15.07.2015    source источник


Ответы (1)


Вы правильно поняли часть регулярного выражения. Все, что вам нужно сделать, это повторить совпадения внутри 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}.

person Sergey Kalinichenko    schedule 15.07.2015
comment
Я думал, что результаты печати будут печатать этот контент по группам. - person NNikN; 15.07.2015