【问题标题】:How to get MFA pattern using regex in Objective-C?如何在 Objective-C 中使用正则表达式获取 MFA 模式?
【发布时间】:2019-10-24 23:13:04
【问题描述】:

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

【问题讨论】:

  • 你得到一个匹配,因为它匹配你的整个模式,你得到你的截图的“完全匹配”。迭代它,然后检查NSTextCheckingResult 的numberOfRanges 属性。如果要查找子范围,也可以使用其中的rangeAtIndex:。

标签: objective-c regex-group nsregularexpression


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2012-03-05
    • 2012-02-12
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多