首页 > 解决方案 > 如何在 Objective-C 中使用正则表达式获取 MFA 模式?

问题描述

我正在使用正则表达式((.*)?:)?(.*)\\/([0-9]+|[n])?来匹配 type 的模式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"字符串,但我只得到一个匹配项。如何获取屏幕截图中的所有匹配组?我想从字符串中获取module,function和部分。arity

标签: objective-cregex-groupnsregularexpression

解决方案


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

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

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

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


推荐阅读