如何在Objective-C中使用正则表达式获取MFA模式?

时间:2019-06-10 14:24:15

标签: objective-c regex-group nsregularexpression

我正在使用正则表达式((.*)?:)?(.*)\\/([0-9]+|[n])?来匹配类型为module:function/arity的模式,其中arity可以是任何数字> = 0或字符串n

成功案例应匹配:

foo:bar/1
bar/1
foo:bar/0
foo:bar/n
bar/n

这似乎在https://regex101.com/r/AtI5Nw/3上可以正常工作,但是使用以下代码,我只为"mod:func/1"得到一个匹配组。

+ (NSArray<NSTextCheckingResult *> *)matchesInString:(NSString *)string withExpression:(NSRegularExpression *)pattern {
    return [pattern matchesInString:string options:0 range:NSMakeRange(0, [string length])];
}

mfa

我尝试使用"mod:func/1"字符串,但只得到一个匹配。如屏幕截图所示,如何获取所有匹配的组?我想从字符串中获取modulefunctionarity部分。

1 个答案:

答案 0 :(得分:1)

距离我这样做已经有一段时间了,但是...

matchesInString:...返回一个NSTextCheckingResult对象的数组。每个对象代表字符串中整个正则表达式的单个匹配项。

每个NSTextCheckingResult对象都封装了许多“范围”(请参见numberOfRanges属性)。然后,您使用rangeAtIndex:提取该匹配实例中每个组的范围。

如果每个目标都在一个单独的字符串中,则不需要matchesInString:...,只需使用firstMatchInString:...来获得一个,而对于字符串则只需要NSTextCheckingResult。然后,您可以通过获取每个组的范围来提取每个组,然后返回原始字符串以提取该组件的文本。