如何在 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"
字符串,但只得到一个匹配项。如何获取屏幕截图中的所有匹配组?我想从字符串中获取 module
、function
和 arity
部分。
我已经有一段时间没做这个了,但是...
matchesInString:...
return 是 NSTextCheckingResult
个对象的数组。每个对象代表字符串中 整个 正则表达式的单个匹配项。
每个NSTextCheckingResult
对象封装了多个"ranges"(参见numberOfRanges
属性)。然后,您使用 rangeAtIndex:
提取该匹配实例中每个组的范围。
如果每个目标都在一个单独的字符串中,则您不需要 matchesInString:...
,只需使用 firstMatchInString:...
获取一个,并且仅 NSTextCheckingResult
用于您的字符串。然后,您可以通过获取其范围来提取每个组,然后 return 到原始字符串以提取该组件的文本。
我正在使用正则表达式 ((.*)?:)?(.*)\/([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"
字符串,但只得到一个匹配项。如何获取屏幕截图中的所有匹配组?我想从字符串中获取 module
、function
和 arity
部分。
我已经有一段时间没做这个了,但是...
matchesInString:...
return 是 NSTextCheckingResult
个对象的数组。每个对象代表字符串中 整个 正则表达式的单个匹配项。
每个NSTextCheckingResult
对象封装了多个"ranges"(参见numberOfRanges
属性)。然后,您使用 rangeAtIndex:
提取该匹配实例中每个组的范围。
如果每个目标都在一个单独的字符串中,则您不需要 matchesInString:...
,只需使用 firstMatchInString:...
获取一个,并且仅 NSTextCheckingResult
用于您的字符串。然后,您可以通过获取其范围来提取每个组,然后 return 到原始字符串以提取该组件的文本。