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

How to get MFA pattern using regex in Objective-C?

我正在使用正则表达式 ((.*)?:)?(.*)\/([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])];
}

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

我已经有一段时间没做这个了,但是...

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

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

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