【问题标题】:Captured group regex NSRegularExpression iOS捕获的组正则表达式 NSRegularExpression iOS
【发布时间】:2015-10-03 20:52:46
【问题描述】:

我正在尝试执行以下正则表达式:^(\$.)([\d]{1,10})?

https://regex101.com 处的$C14325 字符串的结果是[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)];

Named capture groups with NSRegularExpression 有答案,但我认为如果rangeAtIndex 找不到值,它会抛出异常。

【问题讨论】:

    标签: ios objective-c regex nsregularexpression


    【解决方案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}.

    【讨论】:

    • 我认为打印结果会按组打印该内容。
    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多