objective-c - 如何在 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
解决方案
我已经有一段时间没有这样做了,但是......
matchesInString:...
返回一个对象数组NSTextCheckingResult
。每个对象代表字符串中整个正则表达式的一个匹配项。
每个NSTextCheckingResult
对象都封装了许多“范围”(参见numberOfRanges
属性)。然后,您可以rangeAtIndex:
用来提取该匹配实例中每个组的范围。
如果每个目标都在一个单独的字符串中,则不需要matchesInString:...
,只需使用firstMatchInString:...
来获取一个,并且仅NSTextCheckingResult
用于您的字符串。然后,您可以通过获取其范围来提取每个组,然后返回原始字符串以提取该组件的文本。
推荐阅读
- typescript - 使用与联合成员匹配的键创建对象
- reactjs - ReactJS 从上面的元素获取图像
- macos - 终端中的 SWI prolog 与 SWI 软件下载不同。操作系统
- c# - MigraDoc 单元格背景颜色问题
- php - 如何列出由草稿与已发布过滤的所有文字新闻页面及其 URL?
- angularjs - 如何监视我正在测试的服务的功能?
- r - 如何减去构造相同长度向量的列表
- ruby-on-rails - 如何使用水豚检查特定 html 元素中的 css 类名?
- google-apps-script - 谷歌表格 - 希望在输入日期超过今天的日期后隐藏行
- c# - c#在公共静态类中循环